堆的损坏,C中的错误

时间:2017-04-16 10:46:43

标签: c debugging heap-memory

好吧我不需要解释太多,这个函数在我一直标记的行上得到这个错误,只有在这个函数中有记忆的分配,请帮我找出问题所在...(阅读这里有一些其他主题,但没有任何帮助我解决它) 错误:“Windows在sapProject.exe中触发了断点。

这可能是由于堆损坏,这表示sapProject.exe或其加载的任何DLL中存在错误。 “

void storeTok(char * lexem,int line,enum keywords typeof)
{
    int ind;
    if(tokens.size%100==0)
    {
    if(tokens.size==0)
    {
    tokens.ptrInd=-1;
    tokens.first=(node*)malloc(sizeof(node));
    tokens.first->back = NULL;
    tokens.first->next = NULL;
    tokens.last=tokens.first;
    }
    else
    {
    node * nodenz=(node*)malloc(sizeof(node)); /error is here
    nodenz->back = tokens.last;
    nodenz->next = NULL;
    tokens.last->next=nodenz;
    tokens.last=tokens.last->next;
    tokens.last=nodenz;
    }
    }

    // general




ind=tokens.size-(tokens.size/100)*100;
tokens.last->tokens[ind].type=typeof;
tokens.last->tokens[ind].linen=line;
tokens.last->tokens[ind].lexema=lexem;
tokens.size++;
}

谢谢!

编辑(除此之外,还有一个标题(就是它......):

typedef struct token
{
    char * lexema ;
    int linen;
    enum keywords type;
}token;

typedef struct node
{
    struct node * next,*back;
    token tokens [50];
}node;

typedef struct LL
{
    struct node * last, *first, * ptr;
    int size,ptrInd;
}LL;

LL tokens;

void storeTok(char * lexem,int line,enum keywords typeof);

主要功能:

void main()
{
    int i;
    for(i=0;i<26;++i)
    {
storeTok("blabla",1,END);
storeTok("sdfasd",1,START);
storeTok("sfadds",1,IF);
storeTok("gvdfd",1,THEN);
storeTok("dfsfd",1,ELSE);
    }
    storeTok("dfsfd",1,EOF_);
}

1 个答案:

答案 0 :(得分:0)

这条线可能是受害者。损坏堆的代码在其他地方。您可以使用valgrind或类似工具之类的工具来查找它。 (或者给我们足够的代码来复制错误,我们可以为你追踪它。)