gpt4 book ai didi

c - 为什么下面的代码给出 "dereferencing type-punned pointer will break strict aliasing rules"以及如何修复它?

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

 int test_malloc(void **ptr, size_t size)
{
(*ptr) = malloc(size);
return 0;
}

int test_app()
{
char *data = NULL;
int ret = 0;
ret = test_malloc((void **)&data, 100);
}

编译器:gcc 4.1.2

除其他外,我正在使用 -O2 和 -Wall,我认为它们正在打开一些检查这一点的选项。

最佳答案

你有一个 char* 类型的变量,在 test_malloc 中你通过 void * 类型的左值修改它,这会中断严格的别名规则。

你可以这样解决:

 int test_app()
{
char *data = NULL;
void *void_data = NULL;
int ret = 0;
ret = test_malloc(&void_data, 100);
data = (char*)void_data;
}

但更好的方法是让 test_malloc 返回 void* 以避免此类问题。

关于c - 为什么下面的代码给出 "dereferencing type-punned pointer will break strict aliasing rules"以及如何修复它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10528280/

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