【发布时间】:2015-08-05 22:00:28
【问题描述】:
我必须在由数组组成的数据结构中切换两个元素(结构)。当我为数据结构创建一个新元素时,我会维护一个指向该元素的指针,以便以后可以对其进行修改。当我尝试更改该值时,它似乎与以前相同。你能告诉我哪里错了吗?
struct TimeData {
struct timeval time_send;
struct timeval time_recv;
struct timeval timeout;
struct timeval time_stamp;
int seq;
};
struct TimerWheel {
struct CircularBuffer *cb;
};
struct TimeData *newTimeData(int seq, time_t sec, suseconds_t usec) {
struct TimeData *td;
td = malloc(sizeof(struct TimeData));
td->seq = seq;
td->timeout.tv_sec = sec;
td->timeout.tv_usec = usec;
gettimeofday(&td->time_send, NULL);
return td;
}
int timerWheelAdd(struct TimerWheel *tw, struct TimeData *td) {
if (circularBufferIsFull(tw->cb) == 1)
return 1;
else {
circularBufferAdd(tw->cb, td);
circularBufferShiftE(tw->cb);
return 0;
}
}
struct TimeData *timerWheelGetTmr(struct TimerWheel *tw) {
if (circularBufferIsEmpty(tw->cb) == 1)
return NULL;
else {
struct TimeData *td;
td = circularBufferRead(tw->cb);
circularBufferShiftS(tw->cb);
return td;
}
}
int main() {
struct TimeData *td5;
struct TimeData *td6;
td5 = newTimeData(1, 3, 5000);
td6 = newTimeData(2, 5, 6000);
struct TimerWheel *tw1 = newTimerWheel(10);
timerWheelAdd(tw1, td5);
timerWheelAdd(tw1, td6);
///////NOW I TRY TO MODIFY td5
td5->seq = 67;
struct TimeData *temp;
while ((temp = timerWheelGetTmr(tw1)) != NULL)
printf("%d\n", temp->seq);
//////td5->seq is the same as before
}
编辑
CircularBuffer 结构只是 (void *) 元素的通用循环缓冲区。这个数据结构工作正常。问题是这样的:
当我有一个指向该结构的指针时,为什么我不能更改该结构中的整数?
这是我的 CircularBuffer: C : Insert/get element in/from void array
【问题讨论】:
-
你能显示
struct CircularBuffer和用来操作它的函数吗? -
不试图重现这个,因为它甚至不会编译......没有
CircularBuffer,没有temp...... -
肯定需要一小段代码来复现,实际上给出完整的代码。也许尝试一个更小的例子来测试你在这里做的你不完全自信的事情?
-
我尽量解释清楚,放了很多代码
-
您的失败方式与 Olaf 在您刚刚链接的问题中指出的相同,请查看 minimal, complete and verifiable questions 上的文档。
标签: c arrays pointers struct circular-buffer