我一直在编写一些代码来创建一个字节数组,我将通过套接字发送到另一个进程。但是注意到关于我的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;
答案 0 :(得分:7)
您的代码不会将任何值写入索引307200*3
(因为for
循环到达的最高索引是307199
)。因此,您正在读取内存中超出声明的数组大小的字节。这是未定义的行为,任何事情都可能发生。
其他一些编程语言(例如Java)在数组上执行自动范围检查,在这种情况下会抛出异常。在C ++中,您需要做正确的事情,编译器不会为您生成范围检查代码。