我知道这可能很愚蠢,但我不明白为什么我使用malloc为汽车分配内存后,汽车的大小为8。我输入carsAmount的大小无关紧要,请帮忙。 当我在分配它之前检查数组大小-它是8。 我试图释放它,但出现错误。 我尝试使用realloc-didnt工作。
这是我的代码段:
int* cars = NULL;
int carsAmount;
printf("Enter cars amount:\n");
scanf("%d",&carsAmount);
cars = realloc(cars, (carsAmount)*sizeof(int));
答案 0 :(得分:0)
来自realloc手册页
void *realloc(void *ptr, size_t size);
如果ptr为NULL,则调用等效于malloc(size)
等同于
cars = malloc(carsAmount*sizeof(int))
malloc()和calloc()函数返回指向已分配的指针 适用于任何类型的变量的内存。发生错误时, 这些函数返回NULL。
要检查分配是否成功,只需检查是否
if (cars != NULL)
{
// allocation ok
} else {
// Allocation failed
}
sizeof(int*) / sizeof(int)
| |
V V
sizeof(cars)/sizeof(int)
实际上指针的大小可能是8,而int的大小可能是4。这就是为什么得到2的原因。
答案 1 :(得分:0)
这个问题尚不清楚,您是如何尝试获得数组大小的,但是我猜您正在使用sizeof(cars)
并始终得到8。这是因为sizeof(cars)
将为您提供数组的大小。 cars
指针,并且64位体系结构中的所有指针均为8个字节长。
Malloc和realloc在内部保留缓冲区的大小,但是您作为用户应该跟踪它。