我试图在一个名为“nameChanger”的函数中重新分配一个人指针,我做错了什么?如何重新分配指针以指向另一个指针?
#include <stdio.h>
#include <string.h>
typedef struct {
int age;
char name[50];
} Person;
void nameChanger(Person ** person);
int main() {
Person brian;
brian.age = 27;
strcpy(brian.name, "brian");
Person * brian_pointer = &brian;
nameChanger(&brian_pointer);
printf("changing name to 'rick' : %s\n", brian_pointer->name); // should be 'rick'
return 0;
}
void nameChanger(Person ** person){
Person rick;
rick.age = 50;
strcpy(rick.name, "rick");
Person * rick_p = &rick;
*person = &rick;
}
最佳答案
您需要注意,您的局部变量rick
是在函数nameChanger()
的堆栈帧上分配的,当函数返回时,内存不再有效,您不应该在函数之外使用该地址。
如果需要这样做,请改用malloc()
,或者将变量声明为任何函数外部的全局变量。
尝试理解进程的内存布局,特别是在您的例子中关于堆栈和函数的布局。
关于c - 如何重新分配结构指针,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35320189/