首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 平面设计 > 图形图像 >

这种异常如何解决:Unhandled exception in codebook.exe: 0xC0000005 Access Violation

2013-04-21 
这种错误怎么解决:Unhandled exception in codebook.exe: 0xC0000005 Access Violation代码较长,只粘了结

这种错误怎么解决:Unhandled exception in codebook.exe: 0xC0000005 Access Violation
代码较长,只粘了结构体定义部分,以及主要出错的部分
#include "stdafx.h"
#include <cv.h>
#include <highgui.h>
#include "iostream.h"

#define CHANNELS 3      
// 设置处理的图像通道数,要求小于等于图像本身的通道数

///////////////////////////////////////////////////////////////////////////
// 下面为码本码元的数据结构
// 处理图像时每个像素对应一个码本,每个码本中可有若干个码元
// 当涉及一个新领域,通常会遇到一些奇怪的名词,不要被这些名词吓坏,其实思路都是简单的
typedef struct ce {
   uchar   learnHigh[CHANNELS];   // High side threshold for learning
   // 此码元各通道的阀值上限(学习界限)
   uchar   learnLow[CHANNELS];      // Low side threshold for learning
   // 此码元各通道的阀值下限
   // 学习过程中如果一个新像素各通道值x[i],均有 learnLow[i]<=x[i]<=learnHigh[i],则该像素可合并于此码元
   uchar   max[CHANNELS];         // High side of box boundary
   // 属于此码元的像素中各通道的最大值
   uchar   min[CHANNELS];         // Low side of box boundary
   // 属于此码元的像素中各通道的最小值
   int      t_last_update;         // This is book keeping to allow us to kill stale entries
   // 此码元最后一次更新的时间,每一帧为一个单位时间,用于计算stale
   int      stale;               // max negative run (biggest period of inactivity)
   // 此码元最长不更新时间,用于删除规定时间不更新的码元,精简码本
} code_element;                  // 码元的数据结构

typedef struct code_book {
   code_element   **cb;
   // 码元的二维指针,理解为指向码元指针数组的指针,使得添加码元时不需要来回复制码元,只需要简单的指针赋值即可
   int            numEntries;
   // 此码本中码元的数目
   int            t;            // count every access
   // 此码本现在的时间,一帧为一个时间单位
} codeBook;                     // 码本的数据结构



for ( c=0; c<imageLen; c++)
{
  NUM= NUME[c];
  cB[c].numEntries=NUM;
  cB[c].t=TIM[c];
  for(int i=0; i<NUM; i++)
 {
for(int n=0;n<nChannels;n++)
{
  cB[c].cb[i]->learnHigh[n]=mem[c][i][n];//断点跟踪,在这里出现错误
                  //Unhandled exception in codebook.exe: 0xC0000005 Access Violation

  cB[c].cb[i]->learnLow[n]=mem[c][i][n+3];
  cB[c].cb[i]->max[n]= mem[c][i][n+6];
  cB[c].cb[i]->min[n]= mem[c][i][n+9];
}
memcpy(&(cB[c].cb[i]->t_last_update),&mem[c][i][nChannels+9],4);
memcpy(&(cB[c].cb[i]->stale),&mem[c][i][nChannels+13],4);

 } 


求大侠指点,谢谢! C
[解决办法]
非法指针操作 
   不外乎几种情况:   数组下标越界
          对空置针赋值或者读取

热点排行