看来我的程序在同时打印两个姓氏时崩溃了,我不知道为什么在打印两个姓氏时此链接列表会崩溃的原因。感谢您的帮助:((.。我正在实现一个包含多个元素的链表,但是我只是打印了姓氏,以查看列表是否可以正确地进行迭代,结果在打印第二个姓氏“程序员”后它崩溃了。
struct user
{
char email[30];
char lastname[30];
char firstname[30];
char phonenumber[20];
char status [50];
char password [50];
};
struct nodeTag {
struct user data;
struct nodeTag *pNext;
struct nodeTag *pPrev;
};
typedef struct nodeTag nodeStructType;
int main(){
nodeStructType *pFirst;
nodeStructType *pSecond;
nodeStructType *pRun;
pFirst = malloc(sizeof(nodeStructType));
strcpy(pFirst->data.email,"[email protected]");
strcpy(pFirst->data.password,"artist");
strcpy(pFirst->data.lastname,"iamaartist");
strcpy(pFirst->data.firstname,"artist");
strcpy(pFirst->data.status,"Hello i am a artist");
strcpy(pFirst->data.phonenumber,"092712345678");
pSecond= malloc(sizeof(nodeStructType));
pFirst->pNext=pSecond;
strcpy(pSecond->data.email,"[email protected]");
strcpy(pSecond->data.password,"programmer");
strcpy(pSecond->data.lastname,"programmer");
strcpy(pSecond->data.firstname,"programmer");
strcpy(pSecond->data.status,"Hello i am a programmer");
strcpy(pSecond->data.phonenumber,"092712345678");
pRun=pFirst;
while(pRun->pNext!=NULL){
printf("%s\n", pRun->data.lastname);
pRun=pRun->pNext;
}
}
最佳答案
TL; DR:如上所述,潜伏者:您需要确保您的pNext
指针在链接列表的末尾显式指向NULL
。
当您从C语言中的系统中malloc()
内存时,它会尝试找到一个足够大的块来容纳您正在使用的内存,但不会为您执行对该内存的清理-您将得到所有垃圾最后一个程序没有清理。您看到的是while循环条件没有触发,因为pSecond->pNext
处的内容都不是指向NULL(0x0)的指针。
最重要的是,如果重新启动系统并运行几次程序,可能会很不幸,并遇到pSecond->pNext
确实确实指向NULL的情况,从而导致相当混乱的情况。确实。
奖励:如果您希望函数调用为您处理内存初始化(归零),请查看void *calloc(size_t num_elements, size_t element_size);
。
关于c - 为什么程序在打印两个姓氏时崩溃?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29584734/