byte [] C ++的奇怪行为

时间:2012-03-31 22:25:45

标签: c++ arrays

我一直在编写一些代码来创建一个字节数组,我将通过套接字发送到另一个进程。但是注意到关于我的byte []的一些非常奇怪的行为。

最后的cout打印出99,但是看着我的代码,我找不到设置值的位置。我创建了一个大小为invoiceSize的char数组,它是一个常量。我没有设置值307200 * 3所以我不明白它是如何用值打印出来的......

char tosend[sendingSize];
//Send over the frame
for(int i = 0; i < 307200; i++)
{
    tosend[i * 3] = (byte)imCopy[i/640][i%640].red;
    tosend[i * 3+1] = (byte)imCopy[i/640][i%640].green;
    tosend[i * 3+2] = (byte)imCopy[i/640][i%640].blue;
}

char *bytePointer = tosend;

cout<<(int)tosend[307200* 3]<<endl;

1 个答案:

答案 0 :(得分:7)

您的代码不会将任何值写入索引307200*3(因为for循环到达的最高索引是307199)。因此,您正在读取内存中超出声明的数组大小的字节。这是未定义的行为,任何事情都可能发生。

其他一些编程语言(例如Java)在数组上执行自动范围检查,在这种情况下会抛出异常。在C ++中,您需要做正确的事情,编译器不会为您生成范围检查代码。