struct node {
int x;
struct node *next;
};
void allocateMemory(struct node *some_node) {
some_node = malloc(sizeof(struct node));
}
在另一个功能中:
struct node add(struct node *root, struct node *thisNode, int value)
我试着称之为:
allocateMemory(thisNode->next);
我收到运行时错误。它什么都不做。 然而,当我在上述函数中执行与allocateMemory()相同的操作时,即:
thisNode->next = malloc(sizeof(struct node));
它做它应该做的事情。 我做错了什么?
答案 0 :(得分:2)
这段代码:
void allocateMemory(struct node *some_node) {
some_node = malloc(sizeof(struct node));
}
你可以写:
void allocateMemory(struct node **some_node) {
*some_node = malloc(sizeof(struct node));
}
在打电话的时候:
allocateMemory(&thisNode->next);
答案 1 :(得分:1)
你需要paas 指向指针的指针。
当你有指针时,你可以更改指针指向的值,当你想要更改实际指针时,你需要更深一点。
此外,函数add不应返回值,而是指针?
struct node {
int x;
struct node *next;
};
void allocateMemory(struct node **some_node) {
*some_node = (struct node*)malloc(sizeof(struct node));
}
struct node* add(struct node *root, struct node *thisNode, int value) {
allocateMemory(&thisNode->next);
thisNode->x = value;
root->next = thisNode;
return thisNode;
}