2013-03-04 4 views
0

나는이 코드 조각에 오류가 점점 오전 :잘못된 널 포인터 예외

#include <stdio.h> 
#include <cv.h> 
#include <highgui.h> 

using namespace std; 

int main(int argc, char** argv) 

{ 
//load color img specified by first argument 
//IplImage *img = cvLoadImage(argv[1]); 
    IplImage *img = cvLoadImage(argv[1], CV_LOAD_IMAGE_COLOR); 


IplImage *red = cvCreateImage(cvSize(img->width, img->height),img->depth,img->nChannels); 

IplImage *green = cvCreateImage(cvSize(img->width, img->height),img- >depth,img>nChannels); 

IplImage *blue = cvCreateImage(cvSize(img->width, img->height),img->depth,img->nChannels); 



// setup the pointer to access img data 
uchar *pImg = (uchar*)img->imageData; 

// setup pointer to write data 
uchar *pRed = (uchar*)red->imageData; 
uchar *pGreen = (uchar*)green->imageData; 
uchar *pBlue = (uchar*)blue->imageData;  



int i, j, rED, gREEN, bLUE, byte; 
    for(i = 0 ; i < img->height ; i++) 
{ 

    for(j = 0 ; j < img->width ; j++) 
{ 
rED = pImg[i*img->widthStep + j*img->nChannels + 2]; 

gREEN = pImg[i*img->widthStep + j*img->nChannels + 1]; 
bLUE = pImg[i*img->widthStep + j*img->nChannels + 0]; 
// RED 

pRed[i*img->widthStep + j*img->nChannels + 2] = rED; 
// GREEN 
pGreen[i*img->widthStep + j*img->nChannels + 1] = gREEN; 

// BLUE 
pBlue[i*img->widthStep + j*img->nChannels + 0] = bLUE; 
} 
} 
// save images 

cvSaveImage(argv[2], red); 
cvSaveImage(argv[3], green); 
cvSaveImage(argv[4], blue); 

return 0; 
} 

오류는 디버그 주장에 실패했습니다. expression : null 포인터가 잘못되었습니다.

이것은 중단 점이있는 코드 조각입니다.

#ifdef _DEBUG 
_CRTIMP2_PURE void __CLRCALL_PURE_OR_CDECL _Debug_message(const wchar_t *message, 
const wchar_t *file, unsigned int line) 

    { // report error and die 
    if(::_CrtDbgReportW(_CRT_ASSERT, file, line, NULL, message)==1) 
    { 
     ::_CrtDbgBreak(); 
    } 
} 

노란색 화살표가 가리키는 :: _ CrtDbgBreak()

답변

0
아마도

하지 그 조각의 유일한 문제 만이 줄에 오타있다 :

IplImage *green = cvCreateImage(cvSize(img->width, img->height),img->depth,img>nChannels);

당신은 ' 다시 패스 img>nChannels 아니요 img->nChannels