2016-10-11 2 views
1

이 오류에서 많은 스레드를 발견했지만 저에게 적합한 솔루션을 찾을 수 없었습니다. PGM 이미지에서 데이터를 읽고 매트릭스에 넣으려고합니다. 내 문제는 메모리 재 할당이 오류 realloc: invalid old size과 함께 실패한다는 것입니다. 다음은 재 할당이 수행 된 방법을 보여주는 코드에서 발췌 한 것입니다. 이 줄 이후 머리, 상단 가운데realloc : 유효하지 않은 이전 크기

typedef struct num_matrix { 
    int ** data; 
    int rows; 
    int cols; 
} matrix; 

[in loadPGMImageFromFilename] 
matrix m; 
m.data = (int**)malloc(0*sizeof(int)); 
loadPGMImageData(m); 

[in void loadPGMImageData(matrix &m)] 
ss >> m.rows >> m.cols; // <- sets rows and cols, seems to work 
allocateMatrixMemory(m); 

void allocateMatrixMemory(matrix &m) { 
    int** temp = (int**) realloc(m.data, m.rows*sizeof(int)); // <- ERROR 
    //more stuff 
} 
+4

'(int **) malloc (0 * sizeof (int));'? 이것은 의도적입니까? –

+1

은 무엇입니까? [tag : c] ?? ... – LPs

+1

'ss >> m.rows >> m.cols; –

답변

-4

-> m.data = INT (**)의 malloc (0 *를 sizeof (INT)); m.data가 null입니다. null을 다시 할당 할 수 없습니다.

+0

이것은 코멘트가 아니라 대답입니다. –

+0

이고 유효한 포인터 일 수 있습니다 :'size가 0이면, malloc()은 NULL이나 나중에 성공적으로 free()에 전달 될 수있는 유일한 포인터 값을 반환합니다. ' –

+4

첫 번째 매개 변수로'NULL' 포인터가있는'realloc'은'malloc' 호출과 같습니다. – mch

관련 문제