c - 如何重新分配结构指针

标签 c pointers struct

我正在尝试在名为“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;
}

最佳答案

这里的问题是 ricknameChanger 函数的局部变量。一旦函数结束执行,rick 将不复存在。因此,返回的指针和任何引用都将无效。

您可以使rick 成为指针,并使用malloc() 分配内存。和家人。这样,分配的内存的生命周期将一直到内存为free()-d,所以返回后,访问才有效。

关于c - 如何重新分配结构指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35320189/

相关文章:

使用 pthreads 在 C 中并发读取器和互斥写入器

matlab - 许多参数 MATLAB 的所有可能组合

c - 从没有强制转换的整数生成指针... DS1307、RTC、BCD

c - 我是否需要在 BinaryTree 中释放根或数据?

ios - 从不同类 Swift 中的结构内的变量获取数据

c - 如何从 unsigned char 转换为 long

c++ - 适用于 Windows、Linux 等的跨平台 API 开发

c - 尝试将指针索引到函数中的指针时出现段错误

c - C中指向字符串数组的指针

c - 如何通过对结构中的名称使用 strcmp 将节点添加到列表中?