Click here to Skip to main content
15,886,362 members

Unhandled exception access voilation reading location error while implementing linked list in c++

Revision 5
I have the following functions :

void each_user_specifications :: algorithm_dequeue_stage (single_connection_per_user_queue *q, int tot_queues)
{
packet_with_attributes *temp1, *temp2;
unsigned int temp_tot_size = 0;
int counter = 0, queue_counter = 0;
int pkt_size = 0, temp_pkt_size = 0;
static int run_count = 0;
int ready_to_dequeue_flag = 0, pkt_count = 0, complete_pkt_sent_flag = 0;

run_count ++;

for (int i=0; i < tot_queues; i++)
{
cout <<(q+i)->tokens_generated<<" are generated for this queue\n";
temp1 = (q+i)->head;

while (temp1 != NULL)
{
temp_tot_size += temp1->new_packet_size;
temp1 = temp1->new_packet;
}

temp1 = (q+i)->head;

while (temp1 != NULL)
{
pkt_size = temp1->new_packet_size;
temp_pkt_size = pkt_size;

while (pkt_size != 0)
{
if (temp_tot_size <= (q+i)->tokens_generated)
{
//temp2 = temp1;
ready_to_dequeue_flag = 1;
break;
}

pkt_size --;
temp_tot_size --;
}

if (ready_to_dequeue_flag == 1)
{
(q+i)->tokens_generated = (q+i)->tokens_generated - temp_tot_size;
(q+i)->current_size -= temp_tot_size;
(q+i)->sum_tokens += temp_tot_size;
(q+i)->avg_tokens_lead_or_lagged = (q+i)->sum_tokens/run_count;

if (pkt_size == temp_pkt_size)
{
complete_pkt_sent_flag = 1;
pkt_count ++;
}

while (temp1->new_packet != NULL)
{
temp1 = temp1->new_packet;
pkt_count ++;
}

temp2 = temp1;
ready_to_dequeue_flag = 0;
break;
}

temp1 = temp1->new_packet;
}

temp_tot_size = 0;

while (pkt_count > 0)
{
(q+i)->head = (q+i)->dequeue_the_packet ((q+i)->head);

if ((q+i)->head == NULL)
break;

pkt_count --;
}

/*temp1 = (q+i)->head;

while (temp1 != NULL)
{
temp2 = temp1;

if (temp1->new_packet == NULL)
break;

temp1 = temp1->new_packet;
}

temp2 = temp1;*/

if (complete_pkt_sent_flag == 0)
temp2->new_packet_size = temp_pkt_size - pkt_size;

temp1 = (q+i)->head;

pkt_count = 0;

queue_counter ++;

cout <<"Dequeuing done for queue number "<<queue_counter<<" having class "<<(q+i)->cos<<"\n";

while (temp1 != NULL)
{
cout <<temp1->new_packet_size<<"'"<<temp1->new_packet_arrival_time<<"\n";
temp1 = temp1->new_packet;
}

system ("PAUSE");
}
}




packet_with_attributes* single_connection_per_user_queue :: dequeue_the_packet (packet_with_attributes* temp_head)
{
packet_with_attributes *old_temp_head1, *old_temp_head2;
old_temp_head1 = new packet_with_attributes;
old_temp_head2 = new packet_with_attributes;

old_temp_head1 = temp_head;

while (old_temp_head1->new_packet != NULL)
{
old_temp_head2 = old_temp_head1;
old_temp_head1 = old_temp_head1->new_packet;
}

old_temp_head2->new_packet = NULL;

if (temp_head == NULL)
return temp_head;

else
{
delete old_temp_head1;
return temp_head;
}
}


I am getting error in the last while loop of the first function, although sometimes it's not kicking an error and running freely and dequeuing the packets. But sometimes, it hits the breakpoint and kicks an error of access voilation reading location.

I don't know, what I am doing wrong ? I have tried everything posted in answers, please help.
Posted 21-Sep-12 2:13am by wirelesscomm2k12.
Tags: