C语言出现 "initializer element is not constant" 错误的原因

当在全局变量定义一个指针变量,并动态分配内存后,发现竟然编译不过去,并提示 ""initializer element is not constant"":

char *buf = malloc(1024);

int main() {
    return 0;
};

 

后来知道了,不能将全局变量初始化为一个无法在编译时期确定的值。再想想暑假学习的CSAPP中的链接那部分就知道为什么了。编译器在生成目标文件时,需要将代码段、数据段(初始化了的全局变量和静态变量,未初始化的不会占用磁盘空间)写入目标文件,因此需要在编译时期确定全局变量的值,而 malloc 需要在运行时分配内存,所以就出现这个错误了。

学了链接竟然没有想到这点,该死。

posted @ 2019-08-25 15:59  yuanyb  阅读(10439)  评论(1编辑  收藏  举报