Код *array[i]=NULL;
действует как *(array[i])=NULL;
, а вы хотите (*array)[i]=NULL;
.
Когда i = 1, *(array[i])
разыменовывает struct Object ***
, который следует за struct Object ***
, который вы передали в allocateArrayMemory, в то время как (*array)[i]
разыменовывает вторую struct Object **
в области свежеиспользуемой памяти.1011 *
Некоторые примечания:
Исправлено написание слова «Сегментация» в заголовке.
Проверьте результат malloc перед использованием.В вашем коде у вас есть тест после использования * array;переместите его вверх.
Я предлагаю использовать memset(*array, 0, table_size*sizeof(ObjectP));
вместо цикла для инициализации * массива.
Это плохая форма в C для приведениярезультат malloc.Вместо этого просто скажите *array = malloc(table_size*sizeof(ObjectP));
.
По стилю, я бы использовал allocateArrayMemory как функцию, которая возвращает адрес выделенной памяти, а не через параметр.Например:
ObjectP* allocateArrayMemory(size_t table_size) {
ObjectP *array = malloc(table_size*sizeof(ObjectP));
...
if(array==NULL) { printf ...; return NULL; }
...
for (i=0; i < table_size; ++i)
{
array[i] = NULL;
...
}
...
return array;
и в вызывающей стороне ObjectP *a;
... a = allocateArrayMemory(6);
.