01/10/2018, 12:06
Lỗi can thiệp vùng nhớ
void xoa_ten(list &lsv,char *ten)
{
node *t=NULL;
for(node *i=lsv.dau;i!=NULL;i=i->next)
{
if(strcmpi(i->info.ten,ten)==0)
{
if(i==lsv.dau)
{
lsv.dau=lsv.dau->next;
delete i;
}
}
}
}
ko có break sau khi delete là nó lỗi can thiệp vùng nhớ(access violation) tại sao vậy nhỉ ? nếu ko có break thì nó tiếp tục chạy đến khi i = NULL.
Bài liên quan
Điều kiện bạn đặt ra nó sẽ chạy liên tục từ thằng đầu tiên tới thằng cuối cùng, ở đâu nó cũng sẽ hợp lệ và nhảy vào đến trong cùng, giá trị của lst bị thay đổi liên tục vì i == lst đầu, mà lst đầu khi if thứ 1 true sẽ gán giá trị mới là con trỏ lst next, => , không cố định, thằng i cũng vì vậy mà vị trí trỏ bộ nhớ của nó cũng trỏ lung tung hết.
=> Thuật toán sai, code lại
Dòng này là gì??
dòng đấy chưa del thôi
Ngay sau khi
delete i;
rồi thìi=i->next;
là không hợp lý :vNếu muốn tiếp tục thì phải sao lưu
i->next
trước rồi mới tiến hànhdelete i;
và gán lạii
là node cha củai
vừa xóa. Tức là:Thì delete i đi rồi bước tiếp vòng lặp i->next thế nào được