Как массивы переменной длины (VLA) занимают пространство в памяти?
Я заметил, что VLA не занимают непрерывное пространство памяти, кто-нибудь может подтвердить то же самое?
void func(const IplImage *imgSrc, IplImage *imgDest)
{
  uchar *data = (uchar *)imgSrc->imageData;      
  // get the image data
  int height    = imgSrc->height;
  int width     = imgSrc->width;
  int step      = imgSrc->widthStep;
  int stepSobel = imgDest->widthStep;
  //Calculate Sobel of Image  
  uchar *dataSobel = (sobelStart + stepSobel);  
  //**Declaration of VLAs**
  int prevRowBuf[width],curRowBuf[width],nextRowBuf[width];
  for(int j=1;j<(width-1);j++)
  {    
    prevRowBuf[j] = data[j+1]-data[j-1];
    curRowBuf[j]  = data[step+j+1]-data[step+j-1];
  }
  // Some opencv processing
    for() // Some Conditions
    {
        //memcpy(prevRowBuf,curRowBuf,width);
        //memcpy(curRowBuf,nextRowBuf,width);
        //Replaced with
        for(int i=0 ; i< width; i++)
        {
          prevRowBuf[i]=curRowBuf[i];
          curRowBuf[i]=nextRowBuf[i];
        }
    } 
 }
С двумя операциями memcpy моя программа работала только для нескольких начальных индексов VLA.
Но после замены memcpy на for Loop моя программа отлично работает для всех индексов VLA.
