我正在testing示例代码如下,为什么我在编译时通过gcc 5.6 linux ubuntu 16-4上的警告?
~/c$ gcc malloc.c malloc.c: In function 'main': malloc.c:17:14: warning: assignment makes pointer from integer without a cast [-Wint-conversion] if(number= malloc(50*sizeof(int) )== NULL)
这是我的代码:
#include "stdlib.h" #include "stdio.h" int main() { char* str; int * number; if((str= (char *)malloc(100) )== NULL) { printf("malloc fail n"); exit(1); } printf ("sting was allocaed n"); if(number= malloc(50*sizeof(int) )== NULL) { printf("malloc fail n"); exit(1); } printf ("int was allocaed n"); return 0; }
通过使用popen()的套接字执行命令
C#WPF – registry访问不允许,即使有pipe理员权限?
C ++事件挂钩
如何使用video内存作为标准的内存存储?
在Linux API或系统调用失败后,我必须处理所有errno吗?
如何找出是否启用CONfig_FANOTIFY_ACCESS_PERMISSIONS?
良好的免费FTP客户端库(用于Windows C ++商业应用程序)?
控制台程序终止时调用特定的function
这里
number= malloc(50*sizeof(int) )== NULL
你正在分配从malloc和NULL的返回比较的结果,因为==具有比=更高的优先级。
幸运的是,编译器捕捉到了,因为number是一个指针。
你需要做的是:
(number = malloc(50*sizeof(int)) )== NULL
注意:如果您有疑问,请插入一些括号。 它不花一毛钱。
另外,你很幸运,编译器用默认的警告级别捕获了这个。 在将来,总是编译与所有的警告启用 – -Wextra -pedantic ,也许加上 – -Wextra -pedantic 。
请注意,您的第一次分配是(几乎)好的:
if((str= (char *)malloc(100) )== NULL)
if((str= malloc(100) )== NULL)
甚至更好(是的,不需要乘以sizeof(char) ,它总是1)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。