2015-10-19 6 views
0

Я пытаюсь поместить значения в массив, отправив адрес указателя в функцию и создав динамическое распределение в самой функции. после выделения я получаю первое значение в первом индексе.Распределение не работает должным образом

Это сообщение об ошибке, которое вызвало проблему: Необработанное исключение в 0x00941589 в ConsoleApplication1.exe: 0xC0000005: место записи нарушения доступа 0xCCCCCCCC.

Это то, что я сделал:

void mamain() 
{ 
    *A = NULL; 
    func(&A); 
} 


void func(int** A) 
{ 
    *A = (int*)malloc(sizeof(int) * 5); 

    *A[0] = 5; 
    *A[1] = 8; 
    *A[2] = 67; 
    *A[3] = 2; 
    *A[4] = 3; 

    for (int i = 0; i < 5; i++) 
    { 
     printf("%d,", *A[i]); 
    } 
} 

Я не понимаю, почему мой код не работает, стараясь не понять это, но никакого успеха.

+2

Где 'A' объявлен? –

+0

В 'mamain()', где объявлен 'A'? – donjuedo

+1

Please ** [edit] ** ваш вопрос с помощью [mcve] или [SSCCE (Short, Self Contained, Correct Example)] (http://sscce.org) – NathanOliver

ответ

3

Вы назначили результат своего звонка malloc на номер *A, а не A; таким образом, выражение *A - это ваш массив. Так как [] имеет более высокий приоритет, чем унарный *, выражение *A[0] анализируется как *(A[0]); это не то, что вы хотите.

Вы должны явно группировать * оператора с A перед выполнением подстрочный:

(*A)[0] = 5; 
(*A)[1] = 8; 
...