提示编译器 void * 指向归零的内存

问题描述

许多现代架构使用所有位都设置为零的类型,在这种情况下:

yum update httpd
Loaded plugins: extras_suggestions,langpacks,priorities,update-motd
No packages marked for update


yum install httpd
Loaded plugins: extras_suggestions,kernel-livepatch,update-motd
amzn2-core                                                                                                                                                                           | 3.7 kB  00:00:00     
Package httpd-2.4.46-2.amzn2.x86_64 already installed and latest version
nothing to do

为了完全兼容,我还将分配结构中的所有指针显式设置为 NULL。如果我直接调用 calloc(或任何使用 calloc 的代理函数),编译器可以确定 calloc 分配的内存已经为 x86 的 NULL 正确清零,并简单地删除显式 NULL 分配,但如果我使用函数指针来调用 calloc 显然不能推断出来。如何提示 gcc(或 MSVC)可以安全删除这些分配?

代码示例:

void *p;
memset(&p,sizeof(p));
assert(p == NULL); /* assertion holds on most architectures */

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)