c++ - 我怎样才能知道指针参数的来源?

标签 c++

int a;
int *b;
void test(int* target)
{
    delete(target);
}
test(new int); // <-- It's ok, of course.
test(&a); // <-- It raises assertion fail, of course, too.

上面给出了以下代码。关于 target,我只知道一个指向整数的指针。如何判断参数指针的来源?

最佳答案

您无法可靠地判断指针是否指向有效的动态分配内存部分的开头。

这就是手动内存管理首先很复杂的原因 - 对于您动态分配的所有内容,您需要正确定义谁负责创建以及谁负责删除。弄错这个错误会导致未定义的行为、段错误和所有其他类型的难以追踪的错误。

请记住,尽管 C++ 为您提供了许多工具(RAII、智能指针等),除了少数剩余情况外,这些工具使手动内存管理变得不必要。

关于c++ - 我怎样才能知道指针参数的来源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19285132/

相关文章:

c++ - 使用 while 循环计算前 n 个斐波那契数的程序

c++ - 如何最有效地从具有大小的 char * 构造 std::string

c++ - 是回文函数

c++ - 将多个视频文件合并为一个 mpeg-ts 文件 "on the fly"

c++ - 初始化 C 风格的结构

c++ - 如何使用用户定义的对象从priority_queue 获取非常量顶部元素?

c++ - Qt 显示应用程序,如果当前正在运行

c++ - 如何在 C++ 中定义 512 位整数?

c++ - VirtualBox Guest Additions 编译和 iso 打包

c++ - 什么是类型字符串(模板元编程),它有什么作用?