어리석은 질문 일 수 있습니다. 무언가 같이valgrind로 인한 메모리 누출
char **getArrayOfStrings(int rows, int cols){
int i;
char **aux = malloc(rows * sizeof(char*));
for(i = 0; i < rows; i++)
aux[i] = malloc(cols+1);
return aux;
}
이 나에게 '문자열'의 배열을 반환, 중요한 코드의 덩어리입니다 : freeMemory에서이
void f(...)
{
char **arrayOfStrings;
int i = 0;
arrayOfStrings = getArrayOfStrings(ROWS,COLS);
while(ch != '.' && sscanf (globalString,"%[^,|.]s", arrayOfStrings[i]) > 0)
{
globalString += strlen(arrayOfStrings[i++]) + 1;
ch = (*globalString-1); /** take the terminal characters */
}
freeMemory(&arrayOfStrings,ROWS);
}
입니다 :
void freeMemory(char ***matrix, int size){
int i;
for(i = 0; i < size; i++) free((*matrix)[i]);
free(*matrix);
*matrix = NULL;
}
나는 다음과 같은 기능을 수행했다
내 응용 프로그램을 마친 후 valgrind를 실행하여 메모리 누수를 찾습니다 (처음 valgrind를 사용하고 있습니다). 함수 getArrayOfStrings 나 (물론 난 그냥 하나의 malloc을 사용할 수도 있지만 다른 문제에 완벽하게 정상적으로 것 때문에 내가 놓친 거지 모르는
Finding Invalid Pointer Use With Valgrind
==25012== Copyright (C) 2002-2011, and GNU GPL'd, by Julian Seward et al.
==25012== Using Valgrind-3.7.0 and LibVEX; rerun with -h for copyright info
==25012== Command: dist/Debug/GNU-MacOSX/app
==25012==
==25012== Invalid read of size 8
==25012== at 0x406445: f (Data.c:24)
==25012== by 0x400BE3: main (main.c:27)
:
그리고 나는 다음과 같은 오류가 발생합니다).
편집. (: 24 data.c 이것) :
Valgrind의 내 경험에char **aux = malloc(rows * sizeof(char*));
당신의 동안 조건에
i < ROWS
같은 것을 포함하는 것이 좋습니다? – chris어떻게'arrayOfStrings'을 사용하고 있습니까? – md5
Data.c의 라인 번호 24에 무엇이 있으며 main.c의 라인 번호 27에 무엇이 있습니까? –