即使分配了内存,数组大小也保持不变

时间:2020-05-17 13:41:23

标签: c arrays linux ubuntu dynamic-memory-allocation

我知道这可能很愚蠢,但我不明白为什么我使用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));

2 个答案:

答案 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在内部保留缓冲区的大小,但是您作为用户应该跟踪它。

相关问题