gpt4 book ai didi

C++ 在函数中分配和释放内存

转载 作者:太空宇宙 更新时间:2023-11-04 08:55:50 25 4
gpt4 key购买 nike

考虑以下代码(使用 g++ 构建):

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

typedef struct {
int a;
int b;
char c;
} memstr_t;

memstr_t *ptt_backup;

void mmm(memstr_t*& ptt)
{
ptt = (memstr_t *)calloc(15, sizeof(memstr_t));
ptt[0].a = 1;
ptt[0].b = 2;
ptt[0].c = 'c';
ptt_backup = ptt;
}

void fff()
{
free(ptt_backup);
}

int main(int argc, char *argv[])
{
memstr_t *ptt;

mmm(ptt);
printf("%d %d %c\n", ptt[0].a, ptt[0].b, ptt[0].c);
getchar();
//fff();
free(ptt); // same as fff()?
printf("%d %d %c\n", ptt[0].a, ptt[0].b, ptt[0].c); //why works?
getchar();
return 0;
}

我不明白:

1) 为什么我在释放内存后第二次打印时没有出现段错误?我仍在获取我在 mmm()

中分配的值

2) free()fff() 做同样的事情吗?

最佳答案

1) 取消引用释放的内存可以做任何事情。它可能存在,也可能不存在,它是未定义的行为,可以做任何事情,包括给你的猫发传真。

2) 是的,free() 和 fff() 正在做同样的事情,因为它们都指向相同的内存位置。

关于C++ 在函数中分配和释放内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17109007/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com