为什么在realloc之后数组的长度仍然相同?

时间:2016-11-30 22:44:38

标签: c dynamic-memory-allocation realloc

这是我的代码的一部分:

Private Sub Workbook_BeforePrint(Cancel As Boolean)

    MsgBox "Printing... Maybe..."

End Sub

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

    MsgBox "Saving..."

End Sub

Private Sub Workbook_Open()

    Debug.Print "Running Open"
    MsgBox "Welcome"

End Sub

它被初始化并且有一些值,我在这里跳过这一步以获得更多的清除。

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

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

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

我得到了值5.似乎realloc无法正常工作,因为当我还尝试打印数组的第五个元素时,应该在realloc数组范围之后,它会打印我之前给出的值它。这怎么可能?

有人能指出我在哪里弄错了,我错过了什么?

1 个答案:

答案 0 :(得分:2)

strlen计算以NUL结尾的字符串的长度。幸运的是5(在某些时候遇到零):未定义的行为。

它的大小为 bytes 。您的数组大小为5*sizeof(int),因此可能为20或40,具体取决于int的实际大小。不是你想要的东西。

没有办法告诉"长度"由mallocrealloc分配的块(除了存储它!)

(但您的realloc操作有效)

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