free 或delete后指针怎么样了

  • Post category:other

在C++中,我们使用newdelete来动态分配和释放内存,使用mallocfree来动态分配和释放内存。但是,当我们使用deletefree释放内存后,指针会变成什么呢?本文将为您详细讲解。

delete后指针怎么样了

当我们使用delete释放内存后,指针会变成一个无效的指针,也就是说,指针所指向的内存已经被释放,不能再使用。如果我们继续使用这个指针,就会导致未定义的行为,可能会引发程序崩溃或其他问题。

以下是一个使用delete释放内存后,指针变成无效指针的示例:

int *p = new int(10);
delete p;
cout << *p << endl; // 这里会引发未定义的行为

在上面的示例中,我们首先使用new动态分配了一个int类型的内存,并将其赋值为10。然后我们使用delete释放了这个内存。接着我们尝试输出指针p所指向的内存,这里会引发未定义的行为,因为指针p已经变成了一个无效指针。

free后指针怎么样了

当我们使用free释放内存后,指针会变成一个野指针,也就是说,指针所指向的内存已经被释放,但指针本身并没有被修改,仍然指向原来的内存地址。如果我们继续使用这个指针,就会导致未定义的行为,可能会引发程序崩溃或其他问题。

以下是一个使用free释放内存后,指针变成野指针的示例:

int *p = (int*)malloc(sizeof(int));
*p = 10;
free(p);
cout << *p << endl; // 这里会引发未定义的行为

在上面的示例中,我们首先使用malloc动态分配了一个int类型的内存,并将其赋值为10。然后我们使用free释放了这个内存。接着我们尝试输出指针p所指向的内存,这里会引发未定义的行为,因为指p已经变成了一个野指针。

避免指针变成无效指针或野指针

为了避免指针变成无效指针或野指针,我们应该在释放内存后将指针赋值为nullptr,这样可以避免继续使用这个指针。

以下是一个使用delete释放内存后,将指针赋值为nullptr的示例:

int *p = new int(10);
delete p;
p = nullptr;
cout << p << endl; // 输出nullptr

在上面的示例中,我们首先使用new动态分配了一个int类型的内存,并将其赋值为10。然后我们使用delete释放了这个内存。接着我们将指针p赋值为nullptr,这样可以避免继续使用这个指针。

以下是使用free释放内存后,将指针赋值为nullptr的示例:

int *p = (int*)malloc(sizeof(int));
*p = 10;
free(p);
p = nullptr;
cout << p << endl; // 输出nullptr

在上面的示例中,我们首先使用malloc动态分配了一个int类型的内存,并将其赋值为10。然后我们使用free释放了这个内存。接着我们将指针p赋值为nullptr,这样可以避免继续使用这个指针。

总结

在C++中,当我们使用deletefree释放内存后,指针会变成无效针或野指针。为了避免继续使用这个指针,我们应该在释放内存后将指针赋值为nullptr