gpt4 book ai didi

C++ 对指针 : inconsistent segfault 的引用

转载 作者:搜寻专家 更新时间:2023-10-31 01:41:02 25 4
gpt4 key购买 nike

我正在与一个大型项目合作。由于我们代码的基础结构,基本上所有函数都必须“通过引用返回”:

void doSomething(TYPE &result) {
// do something to result
}

但是,我在尝试使用对指针的引用时遇到了一些段错误。特别是当我试图清理内存时,坏事发生了。为了尝试理解段错误,我编写了一个非常简单的测试代码。我的第一次尝试编译并运行没有任何错误:

int main() {
int* a;

delete a; // Seems to cause no problem!
}

因为这行得通,我决定尝试使用指针引用来做类似的事情:

int main() {
int* a;

delete a; // Suddenly, this line is an "invalid delete".
int*& b = a;
}

为什么会突然出现段错误?另外,如果存在通过引用清理指针保留的内存的“正确方法”,它是什么?

一些研究笔记:

我试图在 StackOverflow 上找到一些答案。根据 Is it safe to delete a NULL pointer? 删除 NULL 指针应该是安全的...我的指针完全未初始化,所以我可能在做一些愚蠢的事情。但是,在我的大型协作代码中,我必须深入挖掘才能将这种指针初始化为 NULL。

我还尝试了解一般的指针引用。另一篇 StackOverflow 帖子建议 http://markgodwin.blogspot.co.il/2009/08/c-reference-to-pointer.html .这是一本好书,但没有解决我的问题。

提前致谢!

最佳答案

在未初始化的指针上调用 delete 会产生未定义的行为。因此,它有时可能不会给您带来问题,但有时可能会崩溃。

对未初始化变量执行的任何类型的访问(除了初始化它)都会导致未定义的行为。例如阅读、比较、删除。

关于C++ 对指针 : inconsistent segfault 的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28885072/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com