1
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是一个指向整数的指针。如何判断参数指针的来源?

4

1 回答 1

3

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

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

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

于 2013-10-10T00:41:42.950 回答