- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
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/
我最近承担了 Photon 中自定义属性的任务。我已经能够弄清楚如何设置自定义属性,但无法获取自定义属性。我的哈希表在我的播放器 Controller 脚本中,而我设置(以及我想要获取)属性的位置在循
我想知道,从指向不完整类型的指针或从指针强制转换是否是未定义的行为? struct _obj; typedef _obj obj; typedef struct{ int val; } obj
用 Swift 编写,我有一个特定的需求,可能是类型双关的候选者。我正在从磁盘镜像中读取文件,它们存在于连续的 512 字节扇区中。文件以 Data 的形式从磁盘中脱离出来struct 很容易转换为字
我正在使用 MinGW 在 Windows 上从源代码编译 Go。运行 make.bat 时,出现以下错误: # Building C bootstrap tool. cmd/dist cmd/dis
我已经对类似主题和一些与之相关的 Material 进行了一些查询。 但我的查询主要是为了了解以下代码的警告。我不想修复!! 我理解有两种方式,一个 union 或使用 memcpy . uint32
我正在使用 C# 在 PC 上开发 Unity 游戏应用程序,使用 Visual Studio Code 作为编辑器。这些应用程序针对 PC 和 Android。多人游戏使用 Photon Pun 2
我正在编写一组 C 代码来优化它。我在修复损坏的代码时遇到警告。 环境是Linux,C99,使用-Wall -O2标志进行编译。 最初,结构体文本的定义如下: struct text {
我的 cast 行代码中有此警告: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict- alia
我使用一个 QueryInterface 函数,它会根据 IID 返回给定接口(interface)上的指针。 DecodingFramework::IVariableFramerate* pInt
我有一些代码使用类型双关来避免必须调用成员“对象”的构造函数和析构函数,除非/直到它确实需要使用该对象。 它工作正常,但在 g++ 4.4.3 下,我收到了这个可怕的编译器警告: jaf@jeremy
#define HTON_I32(x) htonl(x) inline float __HTON_F32(float x) { int i = HTON_I32(*((int *)(&x)
我使用了一个将 enum* 转换为 int* 的代码。像这样的: enum foo { ... } ... foo foobar; int *pi = reinterpret_cast(&foobar
int test_malloc(void **ptr, size_t size) { (*ptr) = malloc(size); return 0; } int test_ap
我已经尝试阅读 SO 上具有类似标题的其他问题,但它们都太复杂了,我无法将解决方案(甚至解释)应用于我自己的问题,似乎具有更简单的性质。 在我的例子中,我有一个围绕 free() 的包装器它将指针设置
这个问题在这里已经有了答案: "dereferencing type-punned pointer will break strict-aliasing rules" warning (5 个答案)
我编写的代码在 GCC 4.9、GCC 5 和 GCC 6 中没有警告。它在一些较旧的 GCC 7 实验快照(例如 7-20170409)中也没有警告。但在最近的快照(包括第一个 RC)中,它开始产生
在函数中 size_t csps_socket_read(csps_socket_t *s, csps_packet_wrapper_t *packet, size_t sz) 我收到警告:“解引用类
我在一些遗留的源代码中有一行: #define MAXMSG 1024 ... char m_recvBuf[MAXMSG]; unsigned int msgLength = ntohl(*((un
背景 通过 union 讨论类型双关的大多数未定义或实现定义的性质通常引用以下位,这里通过@ecatmur ( https://stackoverflow.com/a/31557852/2757035
我是一名优秀的程序员,十分优秀!