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,而只有在程序运行时才会有用户的输入。而在编译时没有用户的输入,所以会导致出错。

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

你可能感兴趣的:(函数,C语言,sizeof,Access)