CString多次引用的问题,程序退出时提示错误,出错提示为:File:dbgheap.c Line:1017

he8311 2009-07-14 03:08:58
在一个头文件a.h中定义了
CString hu;
在头文件b.h中定义了
extern CString hu;

在c.h文件中定义
#include "a.h"

UINT ty(LPVOID pParam)
{
for(int i=0;i <20;i++)
{
aa+="dd";//执行文件退出关闭时,此句导致出错。出错提示为:File:dbgheap.c Line:1017。去掉这句就不会有出错提示。

}
AfxMessageBox(aa,NULL,MB_OK);
return 0;
}
在d.cpp文件中调用
void CTest3View::OnEDITvvv()
{
// TODO: Add your command handler code here
AfxBeginThread(ty,this);
}
在e.cpp文件中使用
#include "b.h"
在f.cpp文件中使用
#include "b.h"
只要运行调用CTest3View::OnEDITvvv()函数,程序退出时,会立即报错。
我在e.cpp、f.cpp文件中都要用到hu保存全局结果,那怎么处理啊???
...全文
393 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
chm_8611 2009-08-23
  • 打赏
  • 举报
回复
aa+="dd";//执行文件退出关闭时,此句导致出错。出错提示为:File:dbgheap.c Line:1017。去掉这句就不会有出错提示。

我真没看到你在哪里定义了aa?可能你在其它地方定义了吧。
spring203 2009-07-14
  • 打赏
  • 举报
回复
extern CString hu; 这个最好写进预编译头文件呀!
he8311 2009-07-14
  • 打赏
  • 举报
回复
没有,但我找到问题解决的地方了,原来是头文件包含嵌套造成的,去掉就基本不出错错误了。但不知道原因是什么, 呵呵!先对付着用。不知道哪天这个错误有跳出来了,上天保佑。
spring203 2009-07-14
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 he8311 的回复:]
只起了一个线程,不存在多线程进行同一内存的写操作,不是这个原因造成的。
是不是在不同cpp文件中引用#include "b.h导致的?
[/Quote]
那还有主线程呢?有修改这个值吗?
he8311 2009-07-14
  • 打赏
  • 举报
回复
只起了一个线程,不存在多线程进行同一内存的写操作,不是这个原因造成的。
是不是在不同cpp文件中引用#include "b.h导致的?
spring203 2009-07-14
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 fengrx 的回复:]
建议将ty方法中运行前后进行保护,lock,unlock。

多线程进行同一内存的写操作,不保护数据区域,肯定有问题。
[/Quote]
基本上同意楼上, 顺便分析下cstring, 它的实现是引用计数机制, 因此你即使用=赋值,也解决不了什么问题呀!
fengrx 2009-07-14
  • 打赏
  • 举报
回复
建议将ty方法中运行前后进行保护,lock,unlock。

多线程进行同一内存的写操作,不保护数据区域,肯定有问题。
  • 打赏
  • 举报
回复
顶起!

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧