gpt4 book ai didi

c++ - 试图访问对象数组中的对象,但只保存了一个对象

转载 作者:太空宇宙 更新时间:2023-11-04 13:04:28 24 4
gpt4 key购买 nike

我正在尝试为一个类实现 GoBackN ARQ。我正在尝试读取一个文件,将其分成 30 个字符的数据包,然后将这些数据包存储在一个数据包数组中。所有这些数据包都是 class packet 的对象。

目前,这段代码可以编译和运行,但是当我访问数据包数组时,在数组的索引 0 处我收到了最后一个也是最新的数据包。当我尝试访问索引 1 时,我希望得到一个不同的数据包,但是,所有索引中的数据包都是相同的。

为什么我的所有数据包中的数据都相同?

int numPackets = 0;
packet *packetArray[30];

void addPacket(packet *p)
{
for (int i = 0; i < 30; i++)
{
if (packetArray[i])
{
continue;
}
else
{
packetArray[i] = p;
numPackets++;
break;
}
}
}

int main(int argumentCount, char *argumentVariables[]) {

char buffer[1024];

std::ifstream infile (argumentVariables[1], std::ifstream::binary);
infile.seekg (0, infile.end);
int lengthOfFile = infile.tellg();
infile.seekg (0, infile.beg);

int iterator = 0;
while(1)
{
if (lengthOfFile > 30)
{
bzero(buffer, 1024);
infile.read(buffer, 30);
lengthOfFile -= 30;
addPacket(new packet(1, iterator, strlen(buffer), buffer));
iterator++;
}
else
{
bzero(buffer, 1024);
infile.read(buffer, 30);
addPacket(new packet(1, iterator, strlen(buffer), buffer));
break;
}
}

packet * sendpckt = packetArray[0];
sendpckt->serialize(sendPayload);
printf("%s\n", sendPayload);

infile.close();

return 0;
}

类包的构造函数代码。

packet::packet(int t, int s, int l, char * d){
type = t;
seqnum = s;
length = l;
data = d;
}

最佳答案

你能展示类“packet”的构造函数代码吗?首先,我认为您必须在“infile.read(buffer, 30)”之后的缓冲区末尾添加一个“\0”,其次检查您是将缓冲区复制还是仅将缓冲区的地址复制到“数据包”成员.

关于c++ - 试图访问对象数组中的对象,但只保存了一个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43034097/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com