C语言断点调试VC6.0有没有大神帮忙看下

这个是什么意思?还有每次黄色箭头指向的是有错的吗?图片

5个回答

next指针指向的内存无效(貌似是0x00000000),所以得不到next结构体的值。

caozhy
回答这么多问题就耍赖把我的积分一笔勾销了 回复qq_38837748: 你的图太模糊,我根本就没看见什么箭头
3 年多之前 回复
qq_38837748
qq_38837748 那这个是错的吗?
3 年多之前 回复

你这应该是个链表的节点吧,一般报这个错误,你可能没有为这个节点分配内存空间,你好好看看你的代码

qq_38837748
qq_38837748 就是那个 trans 函数那里
3 年多之前 回复
qq_38837748
qq_38837748 调用 InitStack() 函数
3 年多之前 回复
u010136832
小邓在路上 我说的是分配内存空间,最好吧相应的代码贴一下
3 年多之前 回复
u010136832
小邓在路上 回复qq_38837748: 你怎么初始化的
3 年多之前 回复
qq_38837748
qq_38837748 可我都初始化了
3 年多之前 回复

上代码。。。不然谁知道是什么。。。

这个是代码栈的应用 表达式求值图片图片图片图片图片图片图片图片图片图片图片

#include
#include
#include

define MaxOp 100

define MaxSize 100

typedef char ElemType;
typedef float SElemType_data;

typedef struct linknode
{
ElemType data;
struct linknode *next;
}LiStack;
void InitStack1(LiStack *&op)
{
op=(LiStack *)malloc(sizeof(LiStack));
op->next=NULL;
}
void Push1(LiStack *&op,ElemType e)
{
LiStack *p;
p=(LiStack *)malloc(sizeof(LiStack));
p->data=e;
p->next=op->next;
op->next=p;
}
char Pop1(LiStack *&op, ElemType &e)
{
LiStack *p;
if(op->next==NULL)
return false;
p=op->next;
e=p->data;
op->next=p->next;
free(p);
return e;

}
char GetTop1(LiStack *op,ElemType &e)
{
if(op->next==NULL)
return false;
e=op->next->data;
return e;
}

typedef struct linknode_data
{
SElemType_data data;
struct linknode_data *next;
}LiStack_data;
void InitStack2(LiStack_data *&st)
{
st=(LiStack_data *)malloc(sizeof(LiStack_data));
st->next=NULL;
}

void Push2(LiStack_data *&st,SElemType_data e)
{
LiStack_data *p;
p=(LiStack_data *)malloc(sizeof(LiStack_data));
p->data=e;
p->next=st->next;
st->next=p;
}
float Pop2(LiStack_data *&st, SElemType_data &e)
{
LiStack_data *p;
if(st->next==NULL)
return false;
p=st->next;
e=p->data;
st->next=p->next;
free(p);
return e;

}

float GetTop2(LiStack_data st,SElemType_data &e)
{
if(st->next==NULL)
return false;
e=st->next->data;
return e;
}

struct
{
char ch;
int pri;
}lpri[]={{'=',0},{'(',1},{'
',5},{'/',5},{'+',3},{'-',3},{')',6}},
rpri[]={{'=',0},{'(',6},{'*',4},{'/',4},{'+',2},{'-',2},{')',1}};
int leftpri(char q)
{
int i;
for(i=0;i<MaxOp;i++)
if(lpri[i].ch==q)
return lpri[i].pri;
}
int rightpri(char q)
{
int i;
for(i=0;i<MaxOp;i++)
if(rpri[i].ch==q)
return rpri[i].pri;
}
bool InOp(char ch)
{
if(ch=='('||ch==')'||ch=='+'||ch=='-'||ch=='*'||ch=='/')
return true;
else
return false;
}
int Precede(char q1,char q2)
{
if(leftpri(q1)==rightpri(q2))
return 0;
else if (leftpri(q1)<rightpri(q2))
return -1;
else
return 1;
}

void trans(char *exp,char postexp[])
{

LiStack *op;
InitStack1(op);


int i=0;
ElemType e;
Push1(op,'=');
while(*exp!='\0')
{
    if(!InOp(*exp))
    {   while(*exp>='0'&&*exp<='9')
        {
            postexp[i++]=*exp;
            exp++;
        }
        postexp[i++]='#';
    }
    else
        switch(Precede(GetTop1(op,e),*exp))
        {
           case -1:
              Push1(op,*exp);
              exp++;
              break;
           case 0:
               Pop1(op,e);
               exp++;
               break;
           case 1:
               postexp[i++]=GetTop1(op,e);
               break;
    } 
}
while(GetTop1(op,e)!='=')

{
    postexp[i++]=GetTop1(op,e);
}
postexp[i]='\0';

}

float compvalue(char *postexp)
{
LiStack_data *st;
InitStack2(st);
float d,a,b,c;

while(*postexp!='\0')
{
    switch(*postexp)
    {
       case '+':
           Pop2(st,a);
           Pop2(st,b);
           c=a+b;
           Push2(st,c);
           break;
       case '-':
           Pop2(st,a);
           Pop2(st,b);
           c=b-a;
           Push2(st,c);
           break;
       case '*':
           Pop2(st,a);
           Pop2(st,b);
           c=a*b;
           Push2(st,c);
           break;
       case '/':
           Pop2(st,a);
           Pop2(st,b);
           if(a!=0)
           {
              c=b/a;
              Push2(st,c);
           }
           else
           {
               printf("\n\t除零错误!\n");
               exit(0);
           }
           break;
       default:
           d=0;
           while(*postexp>='0'&&*postexp<='9')
           {
               d=10*d+*postexp-'0';
               postexp++;
           }
           Push2(st,d);
           break;
    }
    postexp++;
}
return(GetTop2(st,d));
return(GetTop2(st,d));

}
void main()
{
char exp[14]="(56-20)/(4+2)";

char postexp[MaxSize];

trans(exp,postexp);
printf("原始表达式:%s\n",exp);
printf("后缀表达式:%s\n",postexp);
printf("表达式的值:%g\n",compvalue(postexp));

}

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐