所以我遇到了一个问题,似乎realloc没有复制缓冲区中的所有数据,所以我决定运行以下代码作为测试。
#include <stdlib.h>
int main(int argc, char** argv)
{
int* tmp_array = malloc(sizeof(int) * 2);
tmp_array[0] = 1;
tmp_array[1] = 2;
tmp_array = realloc(tmp_array, 4);
return 0;
}
我最初遇到的同样问题仍在发生,只有部分数据被复制。缓冲区中的1被复制,但2不复制。我首先为2个整数分配足够的空间,所以如果tmp_array的赋值应该是有效的。然后重新分配到4似乎有效。我甚至尝试将返回的realloc指针显式地转换为int *,但这没有帮助。
不幸的是,我无法在调试器(VS 2017)中显示我的内存窗口的屏幕截图,但它肯定会在realloc之前显示缓冲区中的1和2,并且只在realloc之后显示缓冲区中的1。
我确信我可以通过使用malloc和memcpy手动复制数据来重新实现realloc,但我仍然只想知道为什么这不起作用。
任何帮助是极大的赞赏!
你分配给qazxsw poi字节,而不是qazxsw poi,偶然复制第一个4
(并丢弃其他)。
4*sizeof(int)
,作为int
,在字节上工作,所以你必须以相同的方式使用它们。