Я объявил следующую структуру:
typedef struct _RECOGNITIONRESULT {
int begin_time_ms, end_time_ms;
char* word;
} RECOGNITIONRESULT;
Существует метод, который создает массив RECOGNITIONRESULT и заполняет его (только для целей тестирования):
void test_realloc(RECOGNITIONRESULT** p, int count){
int i;
*p = (RECOGNITIONRESULT *)realloc(*p, count * sizeof(RECOGNITIONRESULT));
for (i = 0; i < count; i++){
(*p)[i].begin_time_ms = 2*i;
(*p)[i].end_time_ms = 2*i+1;
(*p)[i].word=(char *) malloc ( (strlen("hello"+1) * sizeof(char ) ));
strcpy((*p)[i].word,"hello");
}
}
Методдля освобождения памяти это:
void free_realloc(RECOGNITIONRESULT* p, int count){
int i = 0;
if(p != NULL){
if (count > 0){
for (i = 0; i < count; i++){
free(p[i].word); //THE PROBLEM IS HERE.
}
}
free(p);
}
}
Основной метод вызывает эти методы следующим образом:
int main(int argc, char** argv)
{
int count = 10;
RECOGNITIONRESULT *p = NULL;
test_realloc(&p,count);
free_realloc(p,count);
return 0;
}
Затем, если я пытаюсь освободить память, выделенную для "слова", я получаю следующееошибка:
ОБНАРУЖЕНА КОРРУПЦИЯ КАРТЫ: после нормального блока (# 63) в 0x003D31D8.CRT обнаружил, что приложение записало в память после завершения буфера кучи.
Используя обнаруженный мной отладчик, происходит сбой при вызове free (p [i] .word);
Чтоя делаю не так?Как мне освободить память для струн?