Это может быть конец, являющийся глупым вопросом. Я сделал следующие функции:Утечка памяти с 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;
}
Это вернет мне массив «Струны», то кусок кода, который имеет значение что-то вроде:
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);
}
где FreeMemory является:
void freeMemory(char ***matrix, int size){
int i;
for(i = 0; i < size; i++) free((*matrix)[i]);
free(*matrix);
*matrix = NULL;
}
После завершения моего приложения, я бегу с valgrind, чтобы искать утечки памяти (в первый раз я использую valgrind).
И я получаю следующее сообщение об ошибке:
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)
Я не знаю, что мне не хватает, потому что функция getArrayOfStrings кажется прекрасно ко мне (ну я мог бы использовать только один таНос но это другая проблема).
EDIT.
Линия, Valgrind указывают на это один е (Data.c: 24):
char **aux = malloc(rows * sizeof(char*));
Что 'freeMemory'? – chris
Как вы используете 'arrayOfStrings'? – md5
Что находится в строке номер 24 в Data.c, и что находится в строке номер 27 в main.c? –