30/09/2018, 18:06

Tại sao delete một con trỏ nhưng giá trị của nó vẫn khác NULL?

Đây là 1 phần chương trình của em:

class student{
    ........
}
void func(student *a){
    delete a;
    a = NULL;
}
int main(){
    student *stu = new student();
    func(stu);
    ......
}

Sau khi họi hàm func thì stu vẫn khác NULL. Tại sao vậy mọi người?

Itachi Citus viết 20:20 ngày 30/09/2018

void func(student *a){
delete a;
a = NULL;
}

student *&a nó mới cập nhật lại bạn.

void viết 20:10 ngày 30/09/2018

Sau khi họi hàm func thì stu vẫn khác NULL. Tại sao vậy mọi người?

Trong code của bạn, astu là 2 con trỏ trỏ đến cùng một đối tượng. Mình tạm gọi là O.

Khi bạn gán a = NULL, nó không làm cho stu = NULL.
Nếu bạn muốn gán NULL cho stu thông qua a, bạn phải khai báo a là con trỏ trỏ đến con trỏ

Tham khảo:

#include <iostream>
using namespace std;

class student{};
void func(student **a){
    delete (*a);
    *a = NULL;
}
int main(){
    student *stu = new student();
    func(&stu);

    cout << stu << endl;    // stu = 0
    return 0;
}
Bài liên quan
0