初始化后的数组得到BAD值[在C]

时间:2017-08-25 21:23:06

标签: c arrays

首先,我知道构建没有指针的元素数组是不好的编码,但它是我无法改变的练习的一部分

编辑:

    typedef struct st
{
    int id;
    char *name;
    int platforms;
} *Station;

我构建了一个元素数组(结构) -

int num=X
Station statTable= malloc((num)*(sizeof(*statTable)));

并初始化它 -

int i=0
while(i<num){
  station=TS->stations+i*sizeof(*station);
  station->name="blabla";
  station->id=id;
  i++
}

我在初始化及其工作后检查数组,但在对数组进行一些迭代后 -

int i=0;
while(i<num){
  station=TS->stations+i*sizeof(*station);
  printf("%d",station->id);
  i++
}

当TS为大结构时,指向站的名称为站

我得到一个不好的价值(下面的打印屏幕),它总是在第二个单元格中,有人知道它为什么会发生? enter image description here

1 个答案:

答案 0 :(得分:1)

Typedefing指针并不是一种很好的做法。

您的代码中的错误位于指针算术中。更确切地说,这里

station=TS->stations+i*sizeof(*station);

正如我们所知,向指针添加1将使我们在内存中移动而不是一个字节,但sizeof(typeItIsAppliedOn)字节,在这种情况下为sizeof(Station)个字节。

所以你所写的内容很快就会让你超出界限,正如我们所知,在界限之外访问有不明确的行为。

这应该解决它

station = TS->stations + i; // This will point to i-th station in memory

通常,您可以使用此语义来获得更好的可读性

station = &TS->stations[i]; // Get an address of i-th element in array