Вы сделали calloc
, чтобы создать массив указателей, т.е. {q[0], q[1], .., q[9]}
. Но каждый отдельный элемент сам по себе является указателем, и, поскольку вы выполняете calloc
, они, вероятно, инициализированы как NULL
. Но затем вы напрямую пытаетесь получить доступ к q[0]->a
, когда q[0]
все еще указывает на NULL
.
Если вы подключите отладчик и увидите, где он выходит из строя, это, вероятно, будет строка q[0]->a = ...
Сначала вы должны выделить память для q[0]
, а затем получить доступ к q[0]->a
.
#include <stdio.h>
#include <stdlib.h>
struct one
{
int *a;
};
int main()
{
struct one **q;
q = (struct one**) calloc(sizeof(struct one*), 10);
printf("done1\n");
q[0] = (struct one*) calloc(sizeof(struct one), 1);
q[0]->a = (int*) malloc(sizeof(int));
printf("done2\n");
*(q[0]->a) = 10;
printf("done3 , q[0]->a stores %d value\n", *(q[0]->a));
return 0;
}
Кстати, ваш код не компилировался на моем компиляторе, говоря unknown type one**
. Поэтому я изменил его с struct one
везде.