首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于一个C++的有关问题,RETURN 0退出不正常

2013-12-21 
关于一个C++的问题,RETURN 0退出不正常然后就样请教各位大大,这是什么问题啊。。。。。。。执行是没错的,在删除后

关于一个C++的问题,RETURN 0退出不正常


然后就样关于一个C++的有关问题,RETURN 0退出不正常
请教各位大大,这是什么问题啊。。。。。。。执行是没错的,在删除后再查询,确实商品的存在性也被改成了0的

这是我写的增加商品的函数,在这个存入以后,return 0,就没问题.....
                                                                            
[解决办法]
首先我不知道问题是什么?我给个小建议,你的return值毫无意义,各个分支各种case的return都是0,有什么用意呢?我感觉这个有可能比程序成功运行更重要
[解决办法]
io.read((char *)&a,sizeof(shangpin));

 io.write((char *)&a,sizeof(shangpin));

这个直接把类指针强制转化成 char*,你这样操作相当不规范,更何况你成员变量还有一个
 string name; 这里肯定有问题,你自己实现一个getBuffer的功能,把对象组装成数组buffer.
[解决办法]
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

其实你的文件操作不规范,fstream其实不需要你手动close的,它会在析构函数中自行close。我不确定是不是因为你乱用close导致的错误,我凭我的经验,你的错误和return毫无关联,你的错误应该是由于退出函数时,某个对象的析构函数释放资源出错导致。而最有可能的对象就是这一堆fstream。

可是我只用了一次fstream啊,在查询函数那我只用了ifstream啊。。。。。也出错呢。。


ifstream ofstream fstream不都是差不多的东西~~~
不过我确实不能肯定你的问题和close有关,一般来说手动close不会出什么问题。
不我有一点我是确定滴,如果你通过单步调试发现程序在退出函数时崩溃,一定是哪个对象的析构函数出了问题。可能不是i/ofstream,而是别的什么你自己创建的对象,你一个一个查就是了~

哦哦好谢谢


其实你单步调试可以在return时,继续单步跳入,如果有你自己写的类或结果体,并且带析构函数,就会跳进析构函数的代码,如果一路走下来都没错,但最后还是崩溃了,那就说明问题出在库函数定义的类或结构体上,因为他们没源码,所以析构函数一旦出错,程序直接崩溃。



还有正如LS各位所说,string本身是个蛮复杂的类,你不能将其直接写到文件上再读出来。因为string里面的字符串实际应该是存在一个new出来的char 指针里,你将string写到文件上不会有问题,但读出来放到一个string对象里,就有大问题。分两种情况。
1.之前存有这个指针的string对象已经被销毁,于是指针也被delete,变成无效指针,这是你的新string对象被析构时,会再次delete这个指针,自然要杯具。
2.之前存有这个指针的string对象还没被销毁,于是指针还是有效的。但是一旦你新string对象先于旧对象被析构,那么旧对象存有的指针又失效了,就对象又会发生1出现的问题。
所以无论怎么样,你这样直接从文件读取这个string对象,对会在析构时,也就是退出函数(退出作用域)时杯具。

热点排行