新分配太多内存

时间:2013-08-06 20:17:09

标签: c++ c char new-operator

我正在编写简单的函数来合并两个C字符串。在尝试动态地分配新的内存块时,我发现:

char * out = new char[size];
std::cout << strlen(out) <<std::endl;

当size为4时返回16,当size为22时返回40,依此类推。 有没有人知道它为什么会这样,以及如何为具有一定数量字符的c-string分配内存?

2 个答案:

答案 0 :(得分:5)

分配的内存未初始化。 strlen()只是通过内存充电,直到遇到空字符('\0')。由于您尚未初始化out指向的内存,因此该内存的内容未定义,因此strlen()的行为也是如此。

strlen() 衡量分配的大小,因此new分配太多内存的解释是不正确的,因为您使用的工具来衡量分配的大小根本不会这样做。

在您的情况下,strlen()正在超出此分配的范围。在这种情况下,结果可能是错误的&#34;价值(如你所见)或你的程序可能会崩溃。

答案 1 :(得分:0)

使用new分配内存不会初始化内存:

char * out = new char[size];

// Add this code to initialize out
memset(out,'A',size-1);
out[size-1]='\0';

std::cout << strlen(out) <<std::endl;