2015-03-26 3 views
2

Может кто-то, пожалуйста, избавит меня от моих страданий и скажите, почему я получаю нарушение доступа при инициализации массива с помощью?Инициализация массива в C вызывает нарушение доступа

#include <stdio.h> 

void initData(float **data, size_t N) 
{ 
    int i; 
    *data = (float*)malloc(N * sizeof(float)); 

    for (i=0; i<N; i++) 
    { 
     *data[i] = 1.0; 
    } 
} 

void main() 
{ 
    float *data; 
    initData(&data,8); 
} 

ответ

14

разыменовать (*) имеет более низкий приоритет, чем квадратный оператора кронштейна []. Что вы пишете, таким образом, эффективно переведен на:

*(data[i]) = 1.0; 

отказ которого не должно никого удивлять.

Изменить его:

(*data)[i] = 1.0; 

и он не сломается.


Include stdlib.h, чтобы избавиться от предупреждения.

+0

Ах да, имеет смысл, когда вы это понимаете. Я не знал о приоритете! Спасибо – AlexS

+0

@AlexS Добро пожаловать :) – axiom

Смежные вопросы