【发布时间】:2013-04-14 23:33:22
【问题描述】:
我的程序在以下一段 od 代码上崩溃:
newElement->name = (char*) malloc((strlen(name) + 1) * sizeof(char));
通过使用调试器,我收到 SIGABRT 错误,我不知道为什么,因为它在第二次迭代期间停止(第一次迭代没有任何问题)。
我检查了如果
name
有一个终止的空字符,它有。
这是完整的代码:
element* createElement(const char* name, const char* text) {
if (name == NULL) return NULL;
element* newElement = malloc(sizeof(element));
if (newElement == NULL) return NULL;
newElement->name = (char*) malloc((strlen(name) + 1) * sizeof(char));
if (newElement->name == NULL) return NULL;
strcpy(newElement->name, name);
if (text == NULL) newElement->text = NULL;
else
{
newElement->text = malloc((strlen(text) + 1) * sizeof(char));
if (newElement->text == NULL) return NULL;
strcpy(newElement->text, text);
}
newElement->parentNode = NULL;
newElement->previousSibling = NULL;
newElement->nextSibling = NULL;
newElement->firstChild = NULL;
newElement->lastChild = NULL;
return newElement;
}
【问题讨论】:
-
您希望这里的任何人对此做些什么?
name无效,因此它在strlen中崩溃,或者 malloc 竞技场已损坏,因此它在那里崩溃,或者newElement无效,因此当您取消引用它时它崩溃......我们没有办法知道,因为你提供的信息太少了。 -
"Here is whole code" -- 整个代码至少包括调用者和元素的定义。请提供 SSCCE (sscce.org)。
标签: c memory-management