我正在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; }
closures第一个连接尝试的c ++套接字
通过使用popen()的套接字执行命令
如何在login后在下一个表单中的标签上显示欢迎用户名?
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)
除了[你不应该在C中输出malloc的输出] [1]:
if((str= malloc(100) )== NulL)
甚至更好(是的,不需要乘以sizeof(char) ,它总是1)
总结以上是内存溢出为你收集整理的关于关于转换的编译器警告全部内容,希望文章能够帮你解决关于关于转换的编译器警告所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)