我正在尝试为一个类实现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;
}
class packet
。
packet::packet(int t, int s, int l, char * d){
type = t;
seqnum = s;
length = l;
data = d;
}
答案 0 :(得分:0)
您能否显示类&#34; packet&#34;的构造函数代码。首先,我认为你必须添加一个&#39; \ 0&#39;在&#34; infile.read(缓冲区,30)&#34;之后的缓冲区末尾,第二次检查是否要将缓冲区或缓冲区的地址复制到&#34;数据包&#34;构件。