这是我代码的一部分:
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。无论如何不是您要寻找的。
无法告诉malloc
或realloc
分配的块的"长度"(除了存储它!)
(但是您的realloc
操作有效)
注意:此错误的变化是依靠sizeof(array)
,这是指指指针类型的大小,因为array
是指针,而不是数组!