C语言不能对全局变量使用malloc函数

本文探讨了C语言中全局变量限制导致malloc在外部使用时出现错误的情况,解释了编译时常量初始化的规则,并对比了函数内部调用malloc的差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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,任何函数都不能在全局情况下被调用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

XV_

感谢您的认可,我会继续努力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值