ntdll.dll!76f3f367()
ntdll.dll!76f78aa6()
B.dll!operator new(unsigned int size=1985048172)行59+0x9字节ntdll.dll!76f75b87()
ntdll.dll!76f78752()
A.dll!_heap_alloc_base(unsigned int size=108)行105+0x28字节
A.dll!_heap_alloc_dbg(unsigned int size=72,int nBlockUse=1 .........
A.dll!_nh_malloc_dbg(unsigned int size=72,int nhFlag=0 .........
A.dll!malloc(unsigned int size=72) ......上面是函数调用堆栈的内容,程序的结果当然是崩溃了不过,搞不明白的是,模块A在调用malloc的时候,是怎么扯到模块B上去的呢,并且B里面又new了那么打空间?
ntdll.dll!76f78aa6()
B.dll!operator new(unsigned int size=1985048172)行59+0x9字节ntdll.dll!76f75b87()
ntdll.dll!76f78752()
A.dll!_heap_alloc_base(unsigned int size=108)行105+0x28字节
A.dll!_heap_alloc_dbg(unsigned int size=72,int nBlockUse=1 .........
A.dll!_nh_malloc_dbg(unsigned int size=72,int nhFlag=0 .........
A.dll!malloc(unsigned int size=72) ......上面是函数调用堆栈的内容,程序的结果当然是崩溃了不过,搞不明白的是,模块A在调用malloc的时候,是怎么扯到模块B上去的呢,并且B里面又new了那么打空间?
ntdll.dll!76f3f367()
ntdll.dll!76f78aa6()
B.dll!operator new(unsigned int size=1985048172)行59+0x9字节ntdll.dll!76f75b87()
ntdll.dll!76f78752()
A.dll!_heap_alloc_base(unsigned int size=108)行105+0x28字节
A.dll!_heap_alloc_dbg(unsigned int size=72,int nBlockUse=1 .........
A.dll!_nh_malloc_dbg(unsigned int size=72,int nhFlag=0 .........
A.dll!malloc(unsigned int size=72) ......
ntdll.dll!76f3f367()
ntdll.dll!76f78aa6()
B.dll!operator new(unsigned int size=1985048172)行59+0x9字节
ntdll.dll!76f75b87()
ntdll.dll!76f78752()
A.dll!_heap_alloc_base(unsigned int size=108)行105+0x28字节
A.dll!_heap_alloc_dbg(unsigned int size=72,int nBlockUse=1 .........
A.dll!_nh_malloc_dbg(unsigned int size=72,int nhFlag=0 .........
A.dll!malloc(unsigned int size=72) ......
就是不行啊实在是搞不明白,malloc怎么还能出错呢?并且是扯到别的上面去了
现在是没办法看
目前是有一个类
我把它的new 给重载了
自己用malloc分配内存现在
NEW这个类,进到malloc里面,就这样了
根本类的空间都没分配出来,更不用说调用构造函数了
B.dll是否被A调用到
但等不到它返回就完蛋了
中间我什么都没干啊另说一句,我就是在这个类里面新加了一个成员变量 int 的,
还没使用呢,就这样了,把这个变量干掉就没事
可我全都CLEAR掉
重新REBUILD的了
应该不会有问题啊
在代码里确认一下,有没有做这个事情,
如果没有,可以估计运行栈坏了,
如果是运行栈坏了,在Debug下没有报错(我是只破坏栈的时候),你用的是不是 VC6 编译的,
如果是,看看能不能用 VS2003 或者以上版本编译调试(vs2003以上的),因为这些版本有运行栈的检测的,运行栈一坏,马上就提示,
简而言之:
U模块定义了基类u并导出(重载了new,delete,自己用malloc 和free分配内存)
X,Y,Z模块派生出子类x,y,z,也导出然后,M模块中,分贝new 出x,y,z;
在new y 的过程中,就出现了上面的问题new y的时候,调用malloc(72),是没问题的,y确实72个字节
但malloc返回之前,就出问题了这些代码是很难提出来的
然后,M模块中,分贝new 出x,y,z;
在new y 的过程中,就出现了上面的问题把这段代码发出来. 最好能把U模块重载 new,delete的代码也发下.
void* U:: operator new(size_t size){return malloc(size);}
void U:: operator delete(void *p){free(p);}new的代码 (类似吧)U* pU[3];
for (int i = 0; i< 3; i++){
switch (i)
case 0:
pU[i] = new X; break;
case 1:
pU[i] = new Y; break;......}
也不应该调用到它,因为malloc还没返回呢B.dll中有很多new,
调用堆栈上也看不出来是在那里调用的
系统 API 回调 B.dll应该是不可能的,因为malloc还没返回呢
另外,我用的是2005,不是6.0
void* U:: operator new(size_t size){return malloc(size);}
void U:: operator delete(void *p){free(p);} 你的new和delete根本不是标准的写法. 更何况这里这2个函数完全不需要.如果你不把M模块调用部分 U模块头文件的 真实代码发上来. 帮不了你.另: 你rebuild 对应的头文件有copy过去吗? 还是工程设置好的. 这个你要搞清楚.
B.dll 是一个与X,Y,Z类似的导出类标示用了:__declspec(dllexport)