关于一个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.
[解决办法]其实你单步调试可以在return时,继续单步跳入,如果有你自己写的类或结果体,并且带析构函数,就会跳进析构函数的代码,如果一路走下来都没错,但最后还是崩溃了,那就说明问题出在库函数定义的类或结构体上,因为他们没源码,所以析构函数一旦出错,程序直接崩溃。
还有正如LS各位所说,string本身是个蛮复杂的类,你不能将其直接写到文件上再读出来。因为string里面的字符串实际应该是存在一个new出来的char 指针里,你将string写到文件上不会有问题,但读出来放到一个string对象里,就有大问题。分两种情况。
1.之前存有这个指针的string对象已经被销毁,于是指针也被delete,变成无效指针,这是你的新string对象被析构时,会再次delete这个指针,自然要杯具。
2.之前存有这个指针的string对象还没被销毁,于是指针还是有效的。但是一旦你新string对象先于旧对象被析构,那么旧对象存有的指针又失效了,就对象又会发生1出现的问题。
所以无论怎么样,你这样直接从文件读取这个string对象,对会在析构时,也就是退出函数(退出作用域)时杯具。