Друзья, Я пытаюсь освободить память от массива указателей, как:бесплатно ведет к повреждению памяти
const gchar *strings[21];
strings[0] = malloc(strAuth)
strings[0] = strAuth
....
....
int j=0;
while(j < 20){
if (strlen(strings[j]) != 0) {
g_free((char*)strings[j]);
g_print("Cleaned:%d\n",j);
}
j++;
g_print("%d",j);
}
//g_free((char*)strings);
J гравюр Шифрование до 20, а затем дает
$ ./mkbib
Cleaned:0
1Cleaned:1
2Cleaned:2
34Cleaned:4
56789101112Cleaned:12
1314151617181920*** glibc detected *** ./mkbib: malloc(): memory corruption (fast): 0x0000000000a14e10 ***
Любое объяснение (в C -novice)?
EDIT 1 Извините за глупую информацию, я избегал того, что такое strAuth, потому что это включает в себя библиотеку gtk (у меня плохой опыт по заданию конкретного вопроса, зависящего от библиотеки, в clc). Таким образом, код реальный выглядит:
strings[0] = g_malloc(strlen(gtk_entry_get_text(GTK_ENTRY(e->entry1))));
strings[0] = gtk_entry_get_text(GTK_ENTRY(e->entry1));
gtk_entry_get_text
где имеет тип const gchar *
Возможно, я впустую Ваше время с начальной должности. Пожалуйста помоги.
EDIT 2
const gchar *strings[21];
strings[0] = g_malloc(strlen(gtk_entry_get_text(GTK_ENTRY(e->entry1))));
strings[0] =g_strdup(gtk_entry_get_text(GTK_ENTRY(e->entry1)));
........
int i=2;
while (i < 21) {
if (strlen(strings[i]) != 0) {
g_string_append_printf(tstring, ",\n\t%s=\"%s\"",
keyword[i], strings[i]);
g_free((char*)strings[i]);
strings[i]=NULL;
g_print("Cleaned:%d\n",i);
}
i++;
}
Что is strAuth и почему вы передаете его в malloc (который принимает size_t)? –
Что такое 'strAuth'? – AnT
Мне удалось (возможно) его исправить. Пожалуйста, посмотрите на редактирование 2. Поскольку я не нашел способа проверить, действительно ли строки освобождены, прокомментируйте, если это выглядит лучше. – BaRud