【发布时间】:2016-01-27 05:09:50
【问题描述】:
如果我有一个结构:
typedef struct t_node {
char* id;
struct t_node* next;
}TypeNode;
如果我有这样的构造函数:
void conTypeNode(TypeNode* node, char* id) {
node = malloc(sizeof(TypeNode));
node->id = malloc(strlen(id)+1);
strcpy(node->id, id);
node->next = NULL;
}
那么此代码将出现 sig-fault:
void printTypeNode(TypeNode node) {
printf("%s\n", node.id);
}
int main(int argc, char* argv[]) {
TypeNode* head = NULL;
conTypeNode(head, "head");
printTypeNode(*head); //sig-fault 11: invalid read
}
有人能解释一下为什么会这样吗?我知道如果我将conTypeNode 的语法更改为采用双指针,那么它可以正常工作。我在想也许是因为malloc 会改变存储在局部变量node 中的地址,而不是变量head 中的地址?
【问题讨论】:
-
@Haris,我的错,我修好了。我复制了一些代码并打算简化它。 sig-fault 与此无关。
-
这段代码甚至无法编译,因为
conTypeHead需要两个参数,而不是一个。发布 SSCCE -
conTypeNode应该使用id参数调用。 -
停止更新问题中的代码!发布实际的。
-
@EugeneSh。有一些错误需要修复。