2014-10-18 2 views
1

У меня есть следующая проблема: Мне нужно инициализировать номер столбца, который представляет число, для этого ему необходимо указать его значение, количество делителей и самих делителей. Чтобы хранить делители, мне нужно использовать указатель на массив целых чисел, и здесь начинается проблема.Инициализация указателя на массив целых чисел.

typedef struct { 
     int value; 
     int divisor_amount; 
     int (*divisors)[]; 
    } Number; 

Теперь, так как я не знаю заранее, сколько делителей мой номер posseses Я не могу дать длину в массив.

В основной функции я присваиваю каждому из этих полей значение. Для первых двух переменных это не проблема.

Number six; 
six.value = 6; 
six.divisor_amount = 3; 

Теперь для указателя я не знаю, как его инициализировать. Во время занятий он сказал, чтобы сделать это как:

six.divisors[0] = 1; 
six.divisors[1] = 2; 
six.divisors[2] = 3; 

, но затем я получаю эту erroy от компилятора:

[Error] invalid use of array with unspecified bounds

Так что я подумал, что мне нужно назначить некоторое пространство и попробовал:

six.divisors = malloc(six.divisor_amount*sizeof(int)); 

Но это дает мне просто еще одна ошибка:

[Warning] assignment from incompatible pointer type [enabled by default]

+3

'int (* divisors) [];' вероятно, не то, что вы хотите иметь. Если вы хотите иметь указатель на массив, просто напишите 'int * divisors;', а затем 'malloc' во время инициализации – UnholySheep

+0

Я не могу воспроизвести предупреждение. Поскольку 'six.divisors' является (нефункцио- нальным) типом указателя, это должно работать. Сообщение об ошибке для первого фрагмента совпадает с сообщением 'gcc -std = c99', но я не получаю второй. Как вы скомпилируете? – mafso

+0

Я использую devcpp с включенным -Wpedantic. – Actaeonis

ответ

3
int (*divisors)[]; 

is wrong Это указатель на массив из int.

использование

int *divisors; 

с этим вашим malloc распределение должно работать.

+0

@mafso, справа, исправлено. –