reference:Malloc function (dynamic memory allocation) resulting in an error when it is used globally
#include<stdio.h>
#include<string.h>
#include <stdlib.h>
char *y = (char *)malloc(40); // gives an error here
int main()
{
strcpy(y,"hello world");
}
对于上述例子,在char *y = (char *)malloc(40);
会报错。
如果把它放在函数里面,就不会报错。
#include<stdio.h>
#include<string.h>
#include <stdlib.h>
int main()
{
char *y = (char *)malloc(40); // gives an error here
strcpy(y,"hello world");
}
下面来说说这是为什么。
1 全局变量
对于全局变量,只能
- 定义
- 定义并使用(编译阶段可接受的)常量初始化
对于全局来说,它可以接受的值只能是常量,它会在编译的时候就被确定了。
2 函数调用
对于C语言层级来说,main函数的入口函数,任何函数都必须从main作为入口被调用,malloc是main之外的函数,如果放在外面,没有谁可以调用它,因此,不仅仅是malloc,任何函数都不能在全局情况下被调用。