C-为什么在Realloc之后的数组的长度仍然相同



这是我代码的一部分:

array = (int *) malloc(5*sizeof(int)); 

它是初始化的,有一些值,我在这里跳过此步骤以获取更多清关。

memmove(array, array + 1, 4*sizeof(int));
array = realloc(array, 4*sizeof(int));

我想在这里完成的是删除数组的第一个成员,并向左侧移动整个数组。当我尝试使用以下方式检查数组长度时:

strlen(array);

我获得值5。似乎Realloc无法正常工作,因为当我也尝试打印数组的第五个元素时,该元素应该是在Realloc之后的,它会打印出我以前给它给它的值。这怎么可能?

有人可以指出我在哪里犯错,我想念什么?

strlen计算nul终止字符串的长度。这是运气的5(在某个时候遇到零):未定义的行为。

它是 bytes 中的大小。阵列的大小为5*sizeof(int),因此取决于int的实际大小,大概是20或40。无论如何不是您要寻找的。

无法告诉mallocrealloc分配的块的"长度"(除了存储它!)

(但是您的realloc操作有效)

注意:此错误的变化是依靠sizeof(array),这是指指指针类型的大小,因为array是指针,而不是数组!

最新更新