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

末尾的cout打印出99,但是看着我的代码,我找不到设置值的位置。我创建一个大小为sendSize的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;

最佳答案

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

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

09-18 03:59