![](/img/trans.png)
[英]C - Reassign pointer inside of struct to pointer outside of struct
[英]How to reassign a struct pointer
我正在尝试在名为“ nameChanger”的函数中重新分配Person指针,我在做什么错呢? 如何重新分配一个Person
指针以指向另一个Person
?
#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
函数是本地的。 一旦函数完成执行, rick
将不再存在。 因此,返回的指针和任何引用将无效。
您可以使rick
成为指针,并使用malloc()
和family分配内存。 这样,分配的内存的生存期将一直到该内存为free()
d为止,因此在返回之后,访问将是有效的。
您需要注意,您的局部变量rick
是分配在函数nameChanger()
的堆栈框架上的,当函数返回时,内存不再有效,您不应在函数外部使用该地址。
如果需要这样做,请改用malloc()
,或在任何函数外部将变量声明为全局变量。
尝试了解进程的内存布局,尤其是您所用的堆栈和功能。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.