gpt4 book ai didi

c++ - 运算符 "new"仅返回一个类的非本地堆指针?

转载 作者:可可西里 更新时间:2023-11-01 11:22:28 25 4
gpt4 key购买 nike

语言:C++

平台:Windows Server 2003

我有一个调用 DLL 的 exe。

编辑:(exe 没有做任何事情,它调用了几个全局函数,这些函数在 DLL 中完成与 DLL 相关的所有事情。它没有显式新建任何 DLL 类)

我在 DLL 中为 A 类 分配()内存,它返回给我一个非本地堆指针

我尝试新建 DLL 中的其他类(在 DLL 中),“new”为它们返回一个有效的堆指针,它唯一的 Class A 是没有被正确分配。

我在 Windows 上并通过此函数调用验证堆:

编辑:

 ClassA* pA = new ClassA(); 

_CrtIsValidHeapPointer ( (const void *) pA )

我很困惑为什么这只发生在 new-ing A 类 而没有其他类?

(所有 native 代码)

最终编辑:
事实证明这是一个糟糕的构建。无法让它在新的中重现...为此浪费了 5 天:'(

最佳答案

仅从 DLL 中导出全局函数,并仅通过 v 表调用导出的函数。您的问题只是尝试导出整个类引起的众多问题之一。 DLL 与 .so 库不同。

编辑:由于现在的问题表明该类未导出,但所有这些都是在单个 DLL 中观察到的,因此将提出其他可能的原因。

被测试的 new 返回的是同一个指针,还是指向基础子对象的指针?分配是使用 new 还是 new []?这些中的任何一个都可能导致指针指向堆 block 的中间而不是开始。

关于c++ - 运算符 "new"仅返回一个类的非本地堆指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2815589/

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