所以我遇到了一个问题,似乎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;
}
Run Code Online (Sandbox Code Playgroud)
我最初遇到的同样问题仍在发生,只有部分数据被复制.缓冲区中的1被复制,但2不复制.我首先为2个整数分配足够的空间,所以如果tmp_array的赋值应该是有效的.然后重新分配到4似乎有效.我甚至尝试将返回的realloc指针显式地转换为int*,但这没有帮助.
不幸的是,我无法在调试器(VS 2017)中显示我的内存窗口的屏幕截图,但它肯定会在realloc之前显示缓冲区中的1和2,并且只在realloc之后显示缓冲区中的1.
我确信我可以通过使用malloc和memcpy手动复制数据来重新实现realloc自己,但我仍然只想知道为什么这不起作用.
任何帮助是极大的赞赏!
你正在重新分配到4字节,而不是4*sizeof(int),它只是偶然复制int(并丢弃其他).
realloc,as malloc,对字节工作,所以你必须以相同的方式使用它们.
| 归档时间: |
|
| 查看次数: |
66 次 |
| 最近记录: |