0
char * buffer = new char[SIZE];
memcpy(buffer , somedata , SIZE);

buffer[SIZE]='\0';

最后一行是否会破坏内存? buffer是 SIZE 长度,我们将一些数据放在这个范围之外。谁能为我解释一下吗?

4

4 回答 4

3

是的,这是未定义的行为。你的写作超出了法律范围。

数组在 C++ 中是从 0 开始的,这意味着索引 0 到 SIZE-1 是有效的。

于 2013-02-17T14:23:18.147 回答
3

最后一行是否会破坏内存?

是的。

缓冲区是 SIZE 长度,我们将一些数据放在这个范围之外。

正确的。

谁能为我解释一下吗?

缓冲区是 SIZE 长度,我们将一些数据放在这个范围之外。

于 2013-02-17T14:32:05.700 回答
1

如果您想在 SIZE 索引处为 '\0' 字符留出空间,请创建一个大小为 SIZE+1 的缓冲区。

于 2013-02-17T14:24:38.293 回答
1

是的,它破坏了内存。如果数据不是以零结尾并且您想自己附加一个 0,则数组大小必须比数据大一。索引也是从零开始的,因此要设置缓冲区[SIZE],字符数必须为 SIZE+1。

char* buffer = new char[SIZE+1];
//                          ^^ 
memcpy( buffer, somedata, SIZE );
buffer[SIZE]='\0';
于 2013-02-17T14:25:52.080 回答