【发布时间】:2020-09-11 02:53:19
【问题描述】:
我对 C 语言比较陌生。 在我的程序中,我有一个结构数组,它会定期附加。
我想编写一个函数,它允许我将结构从索引返回到此数组中的另一个:
struct Log{
int sensorState;
int speed;
};
struct Log myEvent[10000];
这是我所做的,但它不起作用(SIGSEV 被抛出):
struct Log *getEvents(int from, int to){
struct Log *events[to-from+1];
for(int i=0; i<=to-from;i++){
events[i]->speed = myEvent[i].speed;
events[i]->sensorState = myEvent[i].sensorState;
}
return events
}
感觉在 Java 或 Python 中会很容易......但我无法在 C 中做到这一点,我尝试了很多东西,我就在这里。
【问题讨论】:
-
首先该函数不返回任何内容。其次,变量
events是一个local 变量,其生命周期在函数返回时结束。从函数返回时,指向该数组的任何指针都会立即失效。 -
我还建议你对那个复制循环做一些rubber duck debugging。你真正在复制什么?
-
你在
struct Log myEvent[10000]中也少了一个分号 -
哦,你取消引用循环内的 uninitialized 指针。你永远不会让
events数组的指针实际上指向某个地方。所以最多三个案例undefined behavior。 -
这能回答你的问题吗? Getting a sub-array from an existing array
标签: c arrays pointers struct segmentation-fault