typedef struct S_Linear_Chain *Chain;
struct S_Linear_Chain
{
char mot[20];
int occ;
Chain next;
};
我正在编码一个字符串列表,我需要标记我的文本。我所有的功能都单独工作,但是在construire_list()
功能中我遇到了段错误。我认为这是因为我的str是恒定的。链new_Chain(){返回NULL; }
Chain insereDebut(Chain deb,char* c)
{
Chain new = malloc(sizeof(struct S_Linear_Chain));
strcpy(new->mot,c);
new->next = deb;
new->occ++;
return new;
}
Chain construire_list()
{
char s1[MAX];
Chain l = new_Chain();
fgets(s1, MAX, stdin);
char * s = strdup(s1);
const char * separators = " ";
char * strToken = strtok (s, separators );
while ( strToken != NULL ) {
insereDebut(l,strToken);
}
return l;
}
我不知道如何解决这个问题,谢谢您的帮助。
我认为这是因为我的str是恒定的。
您为什么这么认为?您的str是not常量:就在这里:
char * s = strdup(s1);
您的代码中有很多错误(实际上令人着迷的是,这么少的代码行中就可以计算出如此多的错误)。
strdup
的调用是不必要的:您可以轻松地标记化s1
。strdup
返回的内存已泄漏。strtok
的调用将找到first令牌。该行的其余部分将保持未标记的状态(必须重复调用strtok
以标记整个行)。\n
将读取的尾随fgets
。strToken
从未更新,因此while
循环将永远运行,直到耗尽所有内存(这可能是导致崩溃的原因。)>insereDebut
的返回值,因此也会在此处泄漏内存。该代码最有可能是:l = insereDebut(l,strToken);
insereDebut
中,此行:new->occ++;
递增未初始化的值(new->occ
的初始值未定义。