首先,我知道构建没有指针的元素数组是不好的编码,但它是我无法改变的练习的一部分
编辑:
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为大结构时,指向站的名称为站
我得到一个不好的价值(下面的打印屏幕),它总是在第二个单元格中,有人知道它为什么会发生?
答案 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