C中的数组初始化会导致访问冲突

Ale*_*exS 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);
}
Run Code Online (Sandbox Code Playgroud)

axi*_*iom 14

Dereference(*)的优先级低于方括号运算符[].你写的内容因此被有效地翻译成:

*(data[i]) = 1.0;
Run Code Online (Sandbox Code Playgroud)

谁的失败不应该让任何人惊讶.

将其更改为:

(*data)[i] = 1.0;
Run Code Online (Sandbox Code Playgroud)

它不会破裂.


包括 stdlib.h以消除警告.