无法理解new或malloc如何与BYTE *合作

时间:2010-03-18 07:37:30

标签: c++ arrays malloc

我试图为10个字节分配内存

BYTE* tmp;
tmp = new BYTE[10];
//or tmp = (BYTE*)malloc(10*sizeof(BYTE));

但是在新的或malloc操作长度* tmp超过10之后(即'\ 0'字符不在tmp数组中的10位)

为什么?

3 个答案:

答案 0 :(得分:8)

new[]malloc()都不会为您\0。{当您为malloc()致电new[]char时,您需要手动初始化该块 - 将\0放入最后一个元素,或使用{{1}整个街区。

答案 1 :(得分:6)

'\0'没有理由在数组的末尾。

malloc(或者就此而言是新的),给你一个10字节的块,这是它为你分配的内存。 的工作是用你的记忆做任何你想做的事。

你可能会混淆一个字符串(比如char[10])。

字符串的整个想法是一个字节数组,但以'\0'结尾表示它的大小。

您分配的字节数组或任何其他数组不是字符串,不会以'\0'结束; 的工作是跟踪它的大小。

答案 2 :(得分:1)

首先,BYTE数组可以包含零,这就是为什么你不能使用strlen来确定数组的长度。

其次,在调用新的BYTE [10]之后,如果你想自动初始化数组为0,你的arrray仍然是未初始化的(包含垃圾),你可以使用以下代码:

BYTE* tmp2;
tmp2 = new BYTE[10]();

但即使在这种情况下你也不能使用strlen,因为strlen返回0。

您必须将数组长度保存到某个变量中,或者只使用std :: vector。