首页 > 解决方案 > 来自指针的填充结构是否会使对该结构的访问在释放后未定义?

问题描述

假设我们有以下情况:

#include <stdio.h>
#include <stdlib.h>

struct test {
    int a;
    int b;
};

int main()
{
    struct test *ptest = malloc(sizeof(struct test));
    struct test jtest;
    ptest->a = 3;
    ptest->b = 2;

    jtest = *ptest;
    free(ptest);

    printf("a: %d\nb: %d\n", jtest.a, jtest.b);
    return 0;
}

由于我释放了指向 的指针ptest,因此释放了它所指的内存区域,jtest在释放ptest? 或者当取消引用以分配jtest它的值时,会复制地址上存在的值ptest

标签: cpointers

解决方案


在 C 中,如果您不使用指针,则始终会创建一个副本。所以,当ptest被释放时,jtest仍然拥有自己的内存副本。


推荐阅读