首页 > 解决方案 > 由于错误的指针算法,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;
}

标签: c++pointersmemcpy

解决方案


使用ImArr+i而不是ImArr + i * NUM_PIX. 添加将自动考虑数组元素的大小,等于整个图像块。


推荐阅读