Вы всегда должны чем-то объявлять свои переменные. Компиляторы не всегда обнуляют неинициализированные переменные. Я также большой поклонник использования calloc
при объявлении массивов - это стилистический выбор c, но особенно с массивами указателей, он гарантирует, что все обнулено. Отладка неинициализированных данных может быть адом.
codificacion **matcod = NULL;
matcod = calloc(256, sizeof(codificacion*));
Обратите внимание, что мы создали массив указателей из 256 элементов, а не целые структуры, и потому что **
- это массив указателей на структуры, а не массив структуры, которые вам затем нужно выделить для каждой структуры:
for(int index=0; index<256; index++)
matcod[index] = malloc(sizeof(codificacion));
Затем вы должны ссылаться на свои элементы с помощью matcod[index]->nbits
.
Теперь вам нужно просто реализовать плоский массив структур и затем передайте указатель на это. Используя распределение stati c, вы даже можете избежать вызова calloc
.
codificacion matcod_array[256] = { 0 };
codificacion *matcod = (codificacion *)&matcod_array;
Поскольку вы передаете только указатель на массив структур, а не на указатель на массив указателей для одиночных структур вы затем должны ссылаться на элементы в массиве, используя matcod[index].nbits
.