c++ - 由于错误的指针算法,memcpy 中的代码崩溃
问题描述
出于某种原因,我无法理解memcpy
循环中的第二个代码崩溃(没有任何错误消息;gcc 7.4.0 Ubuntu 16.04,QT5)所以我猜我的指针算法是错误的,但我不明白为什么:
#include <stdio.h>
#include <string.h>
#define ROWS 48
#define COLS 48
#define CHANNELS 3
#define NUM_PIX ((ROWS) * (COLS) * (CHANNELS))
struct MyImage
{
int width;
int height;
int channels;
unsigned char rawData[NUM_PIX];
};
int main()
{
const int numIm = 16;
MyImage theClsImArr[numIm];
unsigned char ImArr[numIm][ROWS][COLS][CHANNELS];
int Bytes2Copy = NUM_PIX * sizeof(unsigned char);
for (int i = 0; i < numIm; i++ )
memcpy(theClsImArr[i].rawData,ImArr + i * NUM_PIX ,Bytes2Copy ); // works when i = 0, crashes at i = 1
return 0;
}
解决方案
使用ImArr+i
而不是ImArr + i * NUM_PIX
. 添加将自动考虑数组元素的大小,等于整个图像块。
推荐阅读
- angular - nvm 无法识别命令
- .net - Azure 存储 blob 的乐观并发总是抛出 HTTP 412
- mongodb - Mongoose 查询以查找唯一值
- if-statement - OCaml - 如果然后其他
- css - 将事件附加到具有特定类的所有元素
- ruby-on-rails - 如何在redirect_to中传递参数
- node.js - azure 中跨对话框的事件处理
- python - 我可以在程序执行期间在 python 32 位和 python 64 位之间切换吗?
- java - 增量计数不正确
- angular - Nativescript Angular Navigation:找不到相对于 app:// 的模块