gdb로 디버깅시에는 SEGV가 뜨지만 실행시에는 안뜨는데 메모리?
gdb로 디버깅시에는 세그먼트 폴트가 뜨지만 실행시에는 안생기는것이 이해가
안되네여
글구 이런현상이 반복되면 메모리누수가 되어서 나중에 메모리부족현상이 나오는게 아닌가여?
char *directoryName,*fileName;
char newPath[FILEPATH_LEN];
memset(newPath,0x00,sizeof(newPath));
filePath=msg->filePath;
//directory,file name을 구함
directoryName=(char*)calloc(FILEPATH_LEN,sizeof(char));
fileName=(char*)calloc(FILEPATH_LEN,sizeof(char));
strncpy(directoryName,filePath,strlen(filePath));
strncpy(fileName,filePath,strlen(filePath));
directoryName=dirname(directoryName);
fileName=basename(fileName);
if(strcmp(msg->data,SUCCESS_MSG) == 0)
{
//rating file insert..success
sprintf(newPath,"%s/%s",directoryName,RATING_SUCCESSDIR);
}
else
{
//rating file insert ..fail
//FAIL일경우에는 지정된 하나의 디렉토리에 보관함
sprintf(newPath,"%s",RATING_FAILDIR);
}
// filePathDirectory
// make newPath
sprintf(newPath,"%s/%s",newPath,fileName);
ret=MoveFile(filePath,newPath);
if(ret == 0)
{
NORMAL_LOG("Move File Success: %s => %s",filePath,newPath);
}
else
{
ERROR_LOG("Move File Failed: %s => %s",filePath,newPath);
}
Free(fileName); // SIGSEGV시그널 발생?????
Free(directoryName);
return ret;
Re: gdb로 디버깅시에는 SEGV가 뜨지만 실행시에는 안뜨는데 메
위 코드에서 fileName으로 리턴된 포인터는 calloc 으로 할당한 그 포인터가
아닐 경우가 다반사 인듯 하군요. 그걸 해제 하는건 문제가 있습니다.
차라리 아래처럼 쓰세요.
screen + vim + ctags 좋아요~
댓글 달기