【发布时间】:2014-04-02 18:15:02
【问题描述】:
我有一个叫做节点的结构:
typedef struct node
{
int x;
struct node *next;
}node;
我有两个函数 change1() 和 change2() 为节点分配内存。 change1() 采用 指向节点的指针,而 change2() 采用 指向指针的指针 作为参数。
void change1(node ** n)
{
*n = malloc(sizeof(node));
}
void change2(node * n)
{
n = malloc(sizeof(node));
}
如果我调用 change2(&n) 然后尝试为 x 分配一个值(在从函数调用返回到 change2 后在 main 中 ) 并打印出来,我得到 4 作为输出,但是如果我调用 change1(n) 并做同样的事情,我会得到一个 segmentation 错误。
void main()
{
node * n1,*n2 ;
change1(&n1); // Pretty much OK
change2(n2); // Leads to segmentation fault on printing
n1->x = 4;
n2->x = 4;
printf("%d ",n1->x);
printf("%d ",n2->x); // gives SEGMENTATION fault
}
谁能解释在内存分配方面发生了什么以及为什么我作为 n2 发送的指针在返回 main() 后无法反映更改。谢谢!
【问题讨论】:
标签: c pointers segmentation-fault