C结构变量访问

时间:2018-03-13 00:22:15

标签: c pointers struct

我想帮助访问我的struct中的数组。我的程序编译没有任何错误,但当我尝试更改我的结构中的某些值时停止。我对这个问题感到困惑,并非常感谢一些帮助。

全局结构声明:

typedef struct Data {
    float timestamp[array_length];
    float azimuth[array_length];
    float distance[array_length];
    float signal_strength[array_length];
} Datain;

Datain *dataptr;

这是我尝试将数组初始化为我希望它们:

for (i = 0; i <  array_length; i++)
{
    dataptr->timestamp[i]=-100;
    dataptr->distance[i]=-100;
    dataptr->azimuth[i]=-100;
    dataptr->signal_strength[i]=-100;
}

让我知道你的想法

1 个答案:

答案 0 :(得分:0)

dataptr是一个未初始化的指针,它指向无处。你必须 为它分配内存:

dataptr = malloc(sizeof *dataptr); // or malloc(size * sizeof *dataptr)
                                   // for allocating size Datain objects
if(dataptr == NULL)
{
    // error handling
    // do not continue
}

for(i=0;i<array_length;i++)
{
    dataptr->timestamp[i]=-100;
    dataptr->distance[i]=-100;
    dataptr->azimuth[i]=-100;
    dataptr->signal_strength[i]=-100;
}

/*
   or if you do the malloc(size * sizeof *dataptr)

for(size_t i = 0; i < size; ++i)
{
    for(size_t j = 0; j < array_length; ++j)
    {
        dataptr[i].timestamp[j]=-100;
        dataptr[i].distance[j]=-100;
        dataptr[i].azimuth[j]=-100;
        dataptr[i].signal_strength[j]=-100;
    }
}
*/

以后你不必忘记用

释放记忆
free(dataptr);

如果dataptr是一个单一的对象,那么你就不需要申报 它作为指针:

Datain dataptr; // no * here

然后在函数中

for(i=0;i<array_length;i++)
{
    dataptr.timestamp[i]=-100;
    dataptr.distance[i]=-100;
    dataptr.azimuth[i]=-100;
    dataptr.signal_strength[i]=-100;
}

在这里你不需要释放记忆。