Xoá phần tử có giá trị x trong dslk

Mọi người cho em hỏi hàm DelName của em sai chỗ nào mà không xoá được vậy ạ, em cảm ơn ạ

void DelName(List &L, char name[])
{
    Node *p = L.pHead;
    if (strcmp(L.pHead->info.name, name) == 0)
    {
        DelHead(L);
    }
    else
    {
        while (p != NULL)
        {
            if (strcmp(p->pNext->info.name, name) == 0)
            {
                Node *k = p->pNext;
                p->pNext = k->pNext;
                k = NULL;
                delete k;
            }
            p = p->pNext;
        }
    }
    outputListProvinces(L);
}

Bạn thử debug xem. Đặt log trong những điều kiện if xem code của bạn có chạy vào trong đó không. Hồi trước mình cũng gặp vấn đề về so sánh kiểu C-style string.

Bên cạnh đó cũng có vài điểm cần chú ý:

Bạn không post code của hàm DelHead lên đây, bạn có confirm đc phần trong đó đã chạy đúng không?

while (p != NULL)
        {
            if (strcmp(p->pNext->info.name, name) == 0)

Bạn quên chưa kiểm tra p->next có khác NULL hay không.

k = NULL;
delete k;

Bạn đang giải phóng vùng nhớ kiểu gì đây? Mượn tiền tới lúc trả thì thò tay vào bên túi rỗng để lấy tiền trả? :v

2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?