所以我知道我必须做什么的背景。将上一个元素链接到下一个元素。但无论我尝试什么,我都会遇到分段错误(LINUX GCC(。有人能看出我做错了什么吗。打印功能工作正常,因此故障一定在功能中的某个位置。代码跟随。。。
定义。。。(编辑(对不起,现在正在张贴申报单。。。
typedef struct Word {
char *word;
int count;
struct Word *next;
} Word;
typedef Word* Dictionary;
void delete_word (Dictionary dict, char* str){
Dictionary tempprev=dict;
dict=dict->next;
Dictionary tempnext=dict->next;
while (dict!=NULL){
if (strcmp(dict->word,str)==0){
tempprev->next=tempnext;
free (dict->word);
}
tempprev=dict;
dict=dict->next;
tempnext=dict->next;
}
}
您没有展示名称字典是如何定义的。考虑到所提供的函数,名称Dictionary
似乎是一个表示指针的typedef名称。
如果是这样,则可以通过以下方式声明和定义函数
void delete_word( Dictionary *dict, const char *word )
{
while ( *dict )
{
if ( strcmp( ( *dict )->word, word ) == 0 )
{
Dictionary current = *dict;
*dict = ( *dict )->next;
free( current );
}
else
{
dict = &( *dict )->next;
}
}
}
如果你有一个像一样类型为Dictionary
的指针
Dictionary dict;
则该函数被调用为类似
delete_word( &dict, word );
如果列表只能包含一个具有给定单词的节点,那么函数定义可以如下所示
void delete_word( Dictionary *dict, const char *word )
{
while ( *dict && strcmp( ( *dict )->word, word ) != 0 )
{
dict = &( *dict )->next;
}
if ( *dict )
{
Dictionary current = *dict;
*dict = ( *dict )->next;
free( current );
}
}