gpt4 book ai didi

c++ - 是否为空指针未定义行为分配特定内存?

转载 作者:太空宇宙 更新时间:2023-11-04 16:03:28 26 4
gpt4 key购买 nike

我遇到过一种情况,我认为这是未定义的行为:有一个结构有一些成员,其中一个是空指针(这不是我的代码,也不是公共(public)的,我想是空指针是为了让它更通用)。在某个时候,这个指针被分配了一些 char 内存:

void fooTest(ThatStructure * someStrPtr) {
try {
someStrPtr->voidPointer = new char[someStrPtr->someVal + someStrPtr->someOtherVal];
} catch (std::bad_alloc$ ba) {
std::cerr << ba.what << std::endl;
}
// ...

并且在某些时候它在分配部分(operator new)崩溃并出现段错误(有几次它起作用了,这个函数的调用次数更多,情况更多)。我在调试中看到过这个。

我也知道在 Windows 上(我的机器使用的是 Linux)在开始时也有一个 Segmentation fault(我想是在第一次调用分配内存的函数时)。

更多,如果我添加了值的打印:

std::cout << someStrPtr->someVal << " " << someStrPtr->someOtherVal << std::endl;

在try block 之前,一直贯穿到end。我已经完成此打印以查看是否存在关于结构指针的其他问题,但打印的值不是 0 或负值。

我看过这些主题:topic1 , topic2 , topic3我认为有一些 UB 链接到 void 指针。谁能帮我指出这里的问题,以便我解决,谢谢?

最佳答案

不,这本身不是未定义的行为。通常,当代码“在分配部分崩溃”时,这是因为之前的某些事情弄乱了堆,通常是通过写入已分配 block 的一端或多次释放同一 block 。简而言之:错误不在这段代码中。

关于c++ - 是否为空指针未定义行为分配特定内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39577306/

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