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