Попытка получить доступ к объекту в массиве объектов, но только один объект сохраняется

Я пытаюсь реализовать 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;
}

1

Решение

Можете ли вы показать код конструктора класса «пакет». Во-первых, я думаю, что вы должны добавить «\ 0» в конец буфера после «infile.read (buffer, 30)», во-вторых, проверять, копируете ли вы буфер или только адрес буфера в «пакетный» член ,

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]