#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 结构指针可能会产生误导并被视为一种不好的做法。我建议避免它。