我遇到了一种情况,我认为它是未定义的行为:有一个结构有一些成员,其中一个是void指针(它不是我的代码,它不是公开的,我想void指针是使其更通用)。在某些时候,这个指针分配一些字符内存:是否为void指针未定义行为分配特定内存?
void fooTest(ThatStructure * someStrPtr) {
try {
someStrPtr->voidPointer = new char[someStrPtr->someVal + someStrPtr->someOtherVal];
} catch (std::bad_alloc$ ba) {
std::cerr << ba.what << std::endl;
}
// ...
,并在某些时候它崩溃的分配单元(new运算符)与段错误(它的工作原理了几次,有此功能的更多的呼叫,更多情况)。我在调试中看到了这一点。我也知道,在Windows上(我的机器使用Linux),在开始时也存在分段错误(我想在分配内存的函数的第一次调用中)。
更多,如果我增加值的打印:
std::cout << someStrPtr->someVal << " " << someStrPtr->someOtherVal << std::endl;
try块之前,它贯穿到底。我已经完成了这个打印以查看是否存在有关结构指针的其他问题,但打印的值不是0或负值。
我看过这些话题:topic1,topic2,topic3我在想,有一些UB链接到void指针。任何人都可以帮助我指出这个问题,所以我可以解决它,谢谢?
请提供[mcve]。给'void *'分配一个char *'是非常好的。 – Barry
这是一个多线程应用程序吗? – NathanOliver
'bad_aloc $ ba'? – AnT