首页 > 代码库 > malloc error:初始值设定元素不是常量
malloc error:初始值设定元素不是常量
#include <stdio.h>#include <stdlib.h>char *buf = (char *)malloc(BUFSIZ); setbuf(stdout,buf);printf("Set STDOUT full buffer OK!\n");setbuf(stdout,NULL);printf("Set STDOUT no buffer OK!\n");
运行出错:
[zbq@centos6~/test]$ gcc buffer.c buffer.c:18: 错误:初始值设定元素不是常量buffer.c:20: 警告:数据定义时没有类型或存储类buffer.c:20: 警告:函数声明中出现形参名却未指定类型buffer.c:20: 错误:与‘setbuf’类型冲突/usr/include/stdio.h:331: 附注:‘setbuf’的上一个声明在此buffer.c:21: 错误:expected declaration specifiers or ‘...’ before string constantbuffer.c:21: 警告:数据定义时没有类型或存储类buffer.c:21: 错误:与‘printf’类型冲突buffer.c:21: 附注:带有省略号的形参列表无法与空形参名列表声明匹配buffer.c:22: 错误:expected ‘)’ before ‘(’ tokenbuffer.c:23: 错误:expected declaration specifiers or ‘...’ before string constantbuffer.c:23: 警告:数据定义时没有类型或存储类buffer.c:23: 错误:与‘printf’类型冲突buffer.c:23: 附注:带有省略号的形参列表无法与空形参名列表声明匹配
后来百度得知原因是:
char *buf = (char *)malloc(BUFSIZ);
全局变量buf 的初始化的值应该为一个常量,而malloc返回值是不定的(分配成功则返回指向被分配内存的指针,此存储区中的初始值不确定,否则返回空指针NULL),编译器在编译时无法断言start的初始值是多少,于是就自作主张的用0的代替了。这应该属于全局变量和局部变量的初始化的差异所在的地方。
只需将char *buf 改成局部变量就可以编译通过了。
http://zhidao.baidu.com/link?url=WS7VNppnzd1N3YKqL4R6e6jZwf6le_cjkeE5YoXh0pWOAd0oAzlYYM_VEQOzpn2loqufsXaECZBZPs9zBICLea
malloc error:初始值设定元素不是常量
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。