c - 来自指针的填充结构是否会使对该结构的访问在释放后未定义?
问题描述
假设我们有以下情况:
#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
?
解决方案
在 C 中,如果您不使用指针,则始终会创建一个副本。所以,当ptest
被释放时,jtest
仍然拥有自己的内存副本。
推荐阅读
- wpf - 禁用 DataGrid 组标题的可折叠性
- javascript - 仅通过 WebAudio 节点播放视频标签音频
- android - Kotlin - 返回回调事件
- c# - DataGridView OnRowPostPaint 绘制
- asp.net-core - 使用 Docker 构建 MusicStore ASP.NET 示例失败并出现错误 CS0246
- go - 如何通过 Kafka Producer 发送 Protobuf 消息
- java - Android 视图的弱引用安全吗?
- javascript - 分配和传播数组有什么区别?
- python-3.x - InvalidArgumentError:无法创建 NewWriteableFile:文件名、目录名或卷标语法不正确。; 未知错误
- rust - Rust 是否支持比较结构实例而不比较它们的字段?