【发布时间】:2018-04-08 17:47:59
【问题描述】:
好的。所以我有以下结构:
struct pkt {
int seqnum;
int acknum;
int checksum;
char payload[20];
};
现在我有以下变量:
struct pkt packet;
struct pkt* packets[1000];
现在在对packet 进行了几次操作之后,我尝试将其分配给数组单元格,如下所示:
packets[counter++] = (pkt*)&packet;
但这会以某种方式将数组的所有单元格在新赋值时更改为新赋值的值。
我做错了什么?
我刚开始接触 C,所以我对指针和地址不是很熟悉。
EDIT:正在完成分配的函数:
void A_output(struct msg message)
{
struct pkt packet;
packet.acknum = 0;
packet.seqnum = 0;
memset(&packet.payload, '\0', 20);
memcpy((char*)&packet.payload, (char*)&message.data, 20);
memset(&packets[counter]->payload, '\0', 20);
packets[counter++] = (pkt*)&packet;
printAll();
if(nextseq < winbase + winsize) {
packets[nextseq]->seqnum = nextseq;
setChecksum(packets[nextseq]);
tolayer3(0, *packets[nextseq]);
if(winbase == nextseq)
starttimer(0, increment);
nextseq++;
}
}
既然值是作为函数的参数来的,不是每次都有新的内存地址吗?
【问题讨论】:
-
好的。所以你不明白什么是指针?
-
您为所有数据包分配相同的地址,我认为这不是您的意图。
-
是时候深吸一口气,重新阅读 C 书了。不要着急。
-
@Manic “不能使用向量。” 愚蠢的限制。
-
@Manic 好吧,现在可以回答了,我做到了。请记住,下次您提出问题时要从头开始创建minimal reproducible example(如果是寻求调试帮助的问题),这样您就不会得到这些反对意见。