gpt4 book ai didi

c - 为什么重新分配后数组的长度仍然相同?

转载 作者:行者123 更新时间:2023-11-30 20:11:20 24 4
gpt4 key购买 nike

这是我的代码的一部分:

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(在某个时刻遇到零):未定义的行为。

它的大小以字节为单位。您的数组的大小是 5*sizeof(int)所以可能是 20 或 40,具体取决于 int 的实际大小。无论如何,这不是您要寻找的。

无法得知 malloc 分配的 block 的“长度”或realloc (除了存储它!)

(但您的 realloc 操作有效)

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

关于c - 为什么重新分配后数组的长度仍然相同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40899625/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com