hope everyone is doing fine.
So once again, I am making this simulation of a shop using SFML for graphics. My main issue however involves linked lists and I need to make sure I solve this issue or else I will never learn this.
I am not able to use 'delete pointer' when deleting a node in the linked list. It returns this error:
Exception thrown at 0x00007FF8AD56177F (sfml-graphics-d-2.dll) in Supermarket Simulation.exe: 0xC0000005: Access violation reading location 0xFFFFFFFFFFFFFFFF.
Why am I deleting? The customers are the nodes in the linked list. I am deleting when a customer leaves the shop. Once its done leaving it needs to delete. However it just won't delete and keeps throwing that exception in the middle of the program when the customer leaves. Below is the part of the code related to this problem:
void CashOutCustomer() {
SPointer = head;
while (SPointer) {
SPointer->customer.customer.setTexture(SPointer->customer._customer);
SPointer->customer.CashOut(&cashier1, &cashier2, &cashier3);
if (SPointer->customer.DeleteTime) {
this->DeleteCustomer(SPointer); Count--;
}
SPointer = SPointer->next;
}
} //Function to make the customer cashout when done shopping
void DeleteCustomer(ShopStruct *S) {
ShopStruct *TempNext, *TempPrev, *TempDelete;
TempDelete = S; TempDelete->customer.~Customer();
if (head == S) {
if (!S->next) {
head = nullptr; delete TempDelete;
}
else {
TempNext = S->next; head = TempNext; S = head; head->previous = nullptr; delete TempDelete;
}
}
else if(S->next == nullptr) {
S = S->previous; S->next = nullptr; delete TempDelete;
}
else {
TempNext = S->next; TempPrev = S->previous;
TempNext->previous = TempPrev; TempPrev->next = TempNext; S = TempPrev; delete TempDelete;
}
} //Delete customer once its done cashing out
The 'delete TempDelete' part is what the issue is. I could remove this statement and the program would work perfectly fine. But then this will lead to the to-be-deleted pointers be lost in the memory. We know this is not the most efficient way to deal with deleting nodes in linked lists. The pointer will end up staying in the memory for as long as the program is running and at one point it will crash the program. So this is why I need to delete. But then again, this is the issue I am facing.
I appreciate all the help, thank you!
P.S: Please ignore my inefficiency and everything. I know its a mess. I know its not the best way to code.
question from:
https://stackoverflow.com/questions/65602822/c-linked-list-delete-pointer-not-working 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…