hur.cn - 华软网

 热门搜索

MFC 运行问题

  作者:未知    来源:网络    更新时间:2011/9/8
在debug和release下程序都可以正常运行,但单独双击运行时出现access violation问题,地址是:OXC0000005;
我是个新手,不知道问题出在哪里,另外看了下之前的帖子,我的程序里有new类,部分代码如下:
h文件中:
private:
static CIRI *_iri;
CIRI();

cpp文件中
CIRI*
CIRI::instance(void)
{

if(0 == CIRI::_iri)
{
_iri = new CIRI;
}

return CIRI::_iri;
}

CIRI::~CIRI()
{

}


CIRI::CIRI()
{

}
这部分代码不是我写的,程序里需要这个文件代码,还请各位高手帮忙看一下,不知道是不是这里出问题了 。感激不尽!!!!
---华软 网友回答---
另外,机子配置是win7+vc6,CIRI是个类
---华软网友回复---
应该是指针问题吧,你给他赋个初值瞧瞧
---华软网友回复---
是指针未分配就使用的问题,检查下代码看看指针CIRI::_iri是否引用前就分配了内存。
---华软网友回复---
看这个样子应该是单件,即单件模式,一个对象值存在一个实例
static CIRI *_iri;不需要定义成静态的,只需要指针就可以

CIRI::instance(void)放在public下,这样就可以了
只是规范的写法,其实这个类没有错误的,你检查检查其他地方吧
在类构造函数里将_iri初始化为NULL

---华软网友回复---
CIRI::instance(void)必须要是静态的

---华软网友回复---
LZ想实现SINGLETON模式的代码吧,建议看下有关资料;
目的:确保运行时只有一个类实例。
---华软网友回复---
在debug和release下程序都可以正常运行,但单独双击运行时出现access violation问题,地址是:OXC0000005;
----------------------------
路径问题吧,是不是你程序里加载和路径相关的代码呢?
---华软网友回复---
google  线程安全的单列模式
---华软网友回复---
可以看看是不是配置文件没弄好,我以前遇到过类似问题,就是配置文件出错导致的
---华软网友回复---
win7+vc6本身就有问题。
你用win7+vc2005以上版本,或者winxp+vc6吧
引用 1 楼 wanggang125125 的回复:
另外,机子配置是win7+vc6,CIRI是个类

---华软网友回复---
路径问题
或者win7下用vc6的缘故,改为vs2008试试
---华软网友回复---
引用 4 楼 sky101010ws 的回复:
看这个样子应该是单件,即单件模式,一个对象值存在一个实例
static CIRI *_iri;不需要定义成静态的,只需要指针就可以

CIRI::instance(void)放在public下,这样就可以了
只是规范的写法,其实这个类没有错误的,你检查检查其他地方吧
在类构造函数里将_iri初始化为NULL


改为非静态下编译提示错误,说iri不是指针
另外这个文件不是我写的,而且很大,文件本身应该没问题,一些组织给出的,头疼!
---华软网友回复---
引用 10 楼 buyong 的回复:
win7+vc6本身就有问题。
你用win7+vc2005以上版本,或者winxp+vc6吧

引用 1 楼 wanggang125125 的回复:
另外,机子配置是win7+vc6,CIRI是个类


改为winxp下提示 0x00402110指令引用的内存不能为read
 0001:000000a0       ??0CIRI@@AAE@XZ            004010a0 f   Ciri.obj
 0001:000000b0       ?init@CIRI@@QAEHHHH@Z      004010b0 f   Ciri.obj
 0001:00000770       ?moda@CIRI@@QAEHHHAAH000@Z 00401770 f   Ciri.obj
 0001:00000870       ?ut_lt@CIRI@@QAEHHAAM00AAH1@Z 00401870 f   Ciri.obj
 0001:00000a10       ?soco@CIRI@@QAEHHMMMAAM000@Z 00401a10 f   Ciri.obj
 0001:00000d00       ?tcon@CIRI@@QAEHHHHHQAM0AAMAAH@Z 00401d00 f   Ciri.obj
 0001:00001430       ?getcov@CIRI@@QAEXAAM0@Z   00402430 f   Ciri.obj
 0001:000014a0       ?r_sign@CIRI@@QAEMMM@Z     004024a0 f   Ciri.obj
 0001:000014e0       ?hpol@CIRI@@QAENMMMMMMM@Z  004024e0 f   Ciri.obj
以上是部分map文件
不知道怎么解读。。。
---华软网友回复---
引用 9 楼 jiangyuer_xx 的回复:
可以看看是不是配置文件没弄好,我以前遇到过类似问题,就是配置文件出错导致的


配置应该怎样呢?能具体些吗?
我的配置是:静态链接库 改为动态也不行
---华软网友回复---
rebuild all试下,删除目录文件下的.ncb文件和debug文件重新编译,检查是否数组越界或是出现了野指针
---华软网友回复---
引用 15 楼 g6785654 的回复:
rebuild all试下,删除目录文件下的.ncb文件和debug文件重新编译,检查是否数组越界或是出现了野指针

for (int jj = 1; jj <= inum_vals; ++jj) 
{
rrr = indrz[jj - 1];
if (rrr < (float)0.) 
{

rrr = sqrt(fabs(rrr) + (float)85.12) * (float)33.52 - (float)408.99;
if (rrr < (float)0.) 
{
rrr = (float)0.;
}
indrz[jj - 1] = rrr;
win7 下调试,指针定位到了这里----->}
if (ionoindx[jj - 1] > (float)-90.) 
{
goto L1;
}
---华软网友回复---
果断结贴,相对路径的问题。。。。
晕啊,太疏忽了。。。。。
无语。。。。。
感谢大家,回复就有分,辛苦了!
另外,大部分分都给了VisualEleven,毕竟说到了我的痛处。。。
再次感谢大家!
     
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。