我试图在一个名为“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/

10-10 15:17