我不断地在一小部分代码中遇到分割错误,我不知道为什么,我正在使用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;
数据确实在一个点上被释放了,但是它不能到达所说的点。谢谢你的帮助!
发布于 2012-09-14 03:51:44
您没有为entry
指针分配内存。您正在尝试将string
复制到由未初始化的指针entry
指定的虚假位置。您可以改为执行以下操作:
node->entry = malloc(strlen(string) + 1);
strcpy(node->entry, string);
发布于 2012-09-14 03:50:41
你确定你在malloc
调用中崩溃了吗?你在strcpy
上崩溃的可能性更大。事实上,这种情况下的strcpy
几乎肯定会导致糟糕的行为,尽管准确地说,该行为是未定义的。
只要你没有填满你的堆,malloc
就应该会成功。但是,因为您调用的是malloc
而不是calloc
,所以不能保证node->entry
的内容。C标准没有定义用malloc
分配的内存中存储的内容,因此node->entry
充满了垃圾。通过尝试复制到错误的指针,您的应用程序会因为尝试访问错误的内存地址而崩溃。
Alexey Frunze在fix - malloc
空间上是100%正确的,将node->entry
更改为指向新分配的内存,然后将string
复制到node->entry
中。这避免了使用未初始化指针的未定义行为,正如我在another SO answer中所描述的那样。
发布于 2012-09-14 04:45:53
您没有为条目指针分配已分配内存。当分配结构只有4个字节被分配给*入口指针时,你应该这样做
listNode* node = (listNode*)malloc(sizeof(listNode));//为结构节点分配内存->entry= malloc(strlen( string ) + 1);//为string strcpy( node->entry,string)分配内存;//复制字符串
现在它会运行得很好
https://stackoverflow.com/questions/12417855
复制相似问题