C语言:sizeof导致的Memory access violation

C语言:sizeof导致内存非法访问

标签:C语言 sizeof 内存非法访问

by 小威威


1. 理解 sizeof

我们知道,sizeof是用于计算字节数。然而,sizeof虽然会返回变量或数据类型所占的字节数,但它并不是一个函数。在C语言中,sizeof是一个操作符,它是在编译时运行的,而不是在程序进行时再计算字节数。这一点十分重要,十分重要,十分重要。

2.实例

int *pArr1, *pArr2;
scanf("%d", &n);
pArr1 = malloc(n*sizeof(n));
pArr2 =malloc(n*sizeof(pArr1));

错误是在第四行。我们先来看第三行,sizeof(n)在编译时能计算出n所占字节大小,因为n是整型,它所占字节数是确定的,而我们再来看第四行。第四行中sizeof(pArr1)在编译时就不能计算出pArr1所占的内存,因为pArr所占的内存是动态分配的,它取决于我们用户输入的n,而只有在程序运行时才会有用户的输入。而在编译时没有用户的输入,所以会导致出错。


以上内容皆为本人观点,欢迎大家提出批评与指导,我们一起探讨

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值