问题程序如下,运行时,报错:ghgh.exe 中的 0x0042174f 处未处理的异常: 0xC0000005: 写入位置 0x00000000 时发生访问冲突。
以下是程序块,大家看看。红色部分是报错的地方。
inline void Histogram(CImage *pImg, int x, int y, int Dx, int Dy, long *pg)
{
struct IMAGEPARAMENT P;
int i, j;
BYTE *buf;
GetImageParament(pImg, &P); for (i = 0; i < 256; i++)    pg[i] = 0; //MessageBox(NULL, _T("示例用法"), _T("demo"), MB_OK); for (i = 0; i < y + Dy; i++)
{
buf = (BYTE*) pImg->GetPixelAddress(0, i);
for (j = x; j < x + Dx; j++)
pg[buf[j]]++;
}
}
调用形式如下:void CghghView::OnHistog()
{
// TODO: 在此添加命令处理程序代码
long *pg = 0;
int x = 0, y = 0, s = 0, h = 0;
struct IMAGEPARAMENT P;
CClientDC dc(this); GetImageParament(pImg[1], &P);
Histogram(pImg[1], 0, 0, P.nWidth, P.nHeight, pg);    //这样子调用,不会报错,当如果把pg改为*pg,编译就无法通过
CreateHistogram(pImg[2], pg, h, 0, 0);
pImg[2]->BitBlt (dc, x, y, s + 20, h + 20, 0, 0, SRCCOPY);}
大家帮忙指点下,先谢谢了

解决方案 »

  1.   

    看一下传入参数pg指向的内存是否在调用函数前已经分配了。或者干脆pg就是0。
      

  2.   

    1.你的pg在OnHistog()里面都没有用new申请空间,而又在Histogram里用 pg[i]访问,当然会报错啦.... 在调用Histogram(pImg[1], 0, 0, P.nWidth, P.nHeight, pg);之前先pg = new long[256]....
    2.代入参数改为*pg会编译不过,因为你的Histogram函数的参数就是一个long指针,代入的时候当然要代入指针pg,而不是*pg....
      

  3.   

    楼上说的对,
    long *pg = 0; 指针没有地址空间.
    引用时的时候会内存报错.
      

  4.   

    pg只是个指针变量,要分配内存才行:
    long *pg = new long[256];
    最后记得delete[] pg;