我不断地用一小部分代码得到分段错误,我不知道为什么,我正在使用malloc并且无法看到任何原因,就像它碰到数据的一部分一样,它的崩溃。 数据是:
listNode* node = (listNode*)malloc(sizeof(listNode)); <-This is the Line
strcpy(node->entry, string);
node->next = NULL;
使用结构定义:
typedef struct
{
char* entry;
struct listNode* next;
}listNode;
数据确实在某个时刻被释放,但它无法达到这一点。 谢谢你的帮助!
答案 0 :(得分:2)
你确定在malloc
电话上崩溃了吗?你更有可能在strcpy
上崩溃。事实上,在这种情况下,strcpy
几乎保证会导致不良行为,但准确地说行为是未定义的。
只要您没有填满堆,malloc
就应该成功。但是,由于您致电malloc
而非calloc
,因此您无法保证node->entry
的内容。 C标准没有定义用malloc
分配的内存中存储的内容,因此node->entry
充满了垃圾。通过尝试复制到错误的指针,您的应用程序因尝试访问不正确的内存地址而崩溃。
Alexey Frunze在修复 - malloc
空间上100%正确,并将node->entry
更改为指向新分配的内存,然后将string
复制到{ {1}}。这避免了使用未初始化指针的未定义行为,如another SO answer中所述。
答案 1 :(得分:1)
您没有为entry
指针分配内存。您正试图将string
复制到未初始化指针entry
指定的虚假位置。你可以这样做:
node->entry = malloc(strlen(string) + 1);
strcpy(node->entry, string);
答案 2 :(得分:0)
您没有为条目指针分配分配内存。虽然allocateg结构只为4个字节分配了*入口指针 你应该做的
listNode * node =(listNode *)malloc(sizeof(listNode)); //为结构分配内存 node-&gt; entry = malloc(strlen(string)+ 1); //为字符串分配内存 strcpy(node-&gt; entry,string); //复制字符串
现在它运行良好