malloc与sizeof的合用的陷阱
时间: 2023-09-01 20:07:55 浏览: 42
C陷阱与缺陷-答案-练习答案
使用malloc函数动态分配内存时,我们经常会使用sizeof运算符来确定需要分配的内存的大小。但是,sizeof运算符返回的是类型的大小,而不是指针的大小。如果我们不小心使用了指针类型而不是实际类型的sizeof,就会分配不足或过多的内存,从而导致程序崩溃或出现未定义的行为。
例如,如果我们要分配一个包含10个整数的数组,我们可能会写下类似于以下代码:
```
int *array = (int*)malloc(sizeof(int*) * 10);
```
这看起来很合理,但实际上我们分配的只是指向整数的指针数组的内存,而不是10个整数的内存。正确的做法是将sizeof(int*)替换为sizeof(int),即:
```
int *array = (int*)malloc(sizeof(int) * 10);
```
因此,使用malloc和sizeof时一定要小心,确保使用正确的类型来计算所需的内存大小。
阅读全文