C. 分段错误中的链表


#include <stdio.h>

struct mychar{
char value;
struct mychar *nextPtr;
};
typedef struct mychar Mychar;
typedef Mychar *MycharPtr;

void insert(MycharPtr *, char );
void printlist(MycharPtr);

int main(){
MycharPtr startPtr = NULL;
char b = 'b';
insert(&startPtr, b);
printlist(startPtr);
}
void insert(MycharPtr *sPtr, char newvalue){
MycharPtr newlinkPtr;
if (*sPtr == NULL){
newlinkPtr->value = newvalue;
newlinkPtr->nextPtr = NULL;
}
*sPtr = newlinkPtr;
}

void printlist(MycharPtr currentPtr){
printf("%c", currentPtr->value);
}

我只是从只添加一个字符开始。如果我连做不到,我就不能继续做其他事情。

它给了我分割错误,但我真的不知道为什么。

另外,我仍然不明白为什么insert电话中我应该写&但在printlist电话中我不应该写&

您实际上尚未为newlinkPtr分配内存。因此,您只是取消引用并尝试写入未初始化的指针,从而导致未定义的行为。

insert中,您可以将其修改为:

MycharPtr newlinkPtr = malloc(sizeof *newlinkPtr);
if (!newlinkPtr) {
perror("malloc");
return;
}
...

这也说明了为什么 typedef'ing 结构指针可能会产生误导并被视为一种不好的做法。我建议避免它。

相关内容

  • 没有找到相关文章

最新更新