小班电话主题活动方案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Vs2008运行中经常出现的问题汇总版
1.问题:test.exe 中的 0x 1026f689 (msvcr90d.dll) 处未处理的异常:
0xC0000005: 写入位置 0xcccccccc 时发生访问冲突。
答:访问冲突一般都是空指针或是野指针造成的,可能是指针数组或者字符指针未初始化就使用,或者没有给多维指针分配动态内存。
例如:使用filename_array[i]之前就一定要对filename_array[i]分配内存,作初始化;
char* filename_array[2000];
for (nnCount=0;nnCount<fileMAXLEN;nnCount++)
{
filename_array[nnCount]=new char[256];
memset(filename_array[nnCount], 0, 256 );
}。
strcpy( filename_array[nnCount],data.cFileName );
2.问题:设置了断点,但是程序运行时直接忽视了断点,直接执行完毕。
答:程序分为debug版和release版,release版一般是发布版不支持断点调试,debug版可以分步调试。
3.问题:fwrite与fprintf有些什么区别?
答:fwrite一次写入一个数据块,以字节为基本的操作单元。
一般用记事本打开的时候,看到的是乱码,因为他是二进制存储方式所以看到的时候乱码。
只用我们用UltraEdit32编辑器打开,就可以开导其数据了(十六进制显示的数值)。
4.问题:mt.exe : general error c101008a: Failed to save the updated manifest to
the file ".\Debug\FlameDetect.exe.embed.manifest". Bpcn
答:这个问题经常出现!其实并不是你的程序真正出现了什么问题,只是你的编译链接的时候编译器自身的问题而已!也许是VS2005 ,VS2008 的
BUG吧,解决的方法:点class view中的工程,选右鍵,再点clean就可以了;或者是build->clean solusion也可以。
5.问题:Release版和Debug版差异之一,对临时数组的处理。
答:下面看一下代码,
char*g_str;
void fun1()
{
char tmp_str[256];
sprintf(tmp_str,"%s目录下TIF类型\r\n处理图片:%d幅\r\n批处理束!!!",fdirectoryPath,filelen);
g_str=tmp_str;
//AfxMessageBox(g_str);
}
void fun2()
{
AfxMessageBox(g_str);
}
在Debug版运行没有问题,AfxMessageBox输出显示正常;但是,一旦在Release版下运行AfxMessageBox输出显示乱码。
最初怀疑是sprintf函数本身问题,网上的人说Debug版和Release 版下,sprintf函数中tmp_str不能得到正确结果。
如是我在g_str=tmp_str;
语句后面加入显示语句,AfxMessageBox(g_str)在Release版下显示正常,无乱码。
问题当然就不是出在sprintf函数上,而且通过测试我断言:在Debug版和Release版sprintf函数处理结果是一样的。
那问题处在那?
既然在fun1函数中AfxMessageBox(g_str)正确显示,而在fun2函数中AfxMessageBox(g_str)显示乱码,那问题可能就在不同版本下,对一些变量的处理方式不同了。
如是我把代码改成如下步骤:放弃使用字符指
针 char*g_str作全局变量,转而使用字符数组char g_str[256]作为全局变量,直接放弃中间变量tmp_str。
就这样问题解决了,Release版下不再显示乱码了。
char g_str[256];
void fun1()
{
sprintf(g_str,"%s目录下TIF类型\r\n处理图片:%d幅\r\n批处理结束!!!",fdirectoryPath,filelen);
}
void fun2()
{
AfxMessageBox(g_str);
}
总结如下:在debug版下,函数的中间变量(char tmp_str[256])在函数退出后,其生命期虽然结束,但是其先前分配的空间,系统并没有立即收回,所以通过指针赋值操作(g_str=tmp_str)指向的地址空间还存在,通过一系列传递操作,显示正常。
但是在Release版下就不那么幸运了,编译器优化下,生命期一旦结束的中间变量,系统马上收回先前分配的空间,通过指针赋值操作(g_str=tmp_str)指向的地址空间不存在了,所以输出为乱码。
6.解决visual 2008中error PRJ0003 : 生成 cmd.exe 时出错”的问题
解决方案:工具—>选项—>项目和解决方案—>VC++目录,在可执行文件栏中加上如下路径:
$(SystemRoot)\System32
$(SystemRoot)
$(SystemRoot)\System32\wbem
7.问题:
(待续)。