У меня есть очень простой фрагмент ниже, для которого я пытаюсь выяснить причину возникновения ошибки сегментации.C - 2D Array malloc/free - Ошибка сегментации
int main (int argc, char** argv)
{
const int size = 2;
char** test1 = NULL;
int index = 0;
test1=(char**)malloc(sizeof(char*) * size);
if (test1 != NULL)
{
for (index = 0; index < size ; index++)
{
test1[index]=(char*)malloc(sizeof(char));
test1[index]='a';
}
//Removing this block does not result in seg fault - start
for (index = 0 ; index < size ; index++)
{
free(test1[index]); //Seg. fault here
}
//Removing this block does not result in seg fault - end
free(test1);
}
return 0;
}
Если я удалю блок, заключенный в комментарии о начале и конце, я не вижу ошибки seg. Но я думаю, что это приведет к утечке.
Любая помощь очень ценится.
Вы назначая ' 'a'' переменного вы объявили как указатель charaacter. другими словами, 'test [index] = 'a'' заменяет указатель, который был выделен из кучи символом' 'a''. Затем вы пытаетесь освободить '' a'' (поскольку это значение 'test [index]' in 'free (test [index])'), как если бы это был выделенный указатель. Это проблема. Я предполагаю, что вы действительно имели в виду, '* test [index] = 'a''. – lurker
или 'char * test1 = (char *) malloc (sizeof (char) * size);' .. 'test1 [index] = 'a';' .. 'free (test1);' – BLUEPIXY
Jeez ... that была проблема - shold были * test1 [index]. Большое спасибо BLUEPIXY – user3667029