程序出现 “xxx已停止工作”提示该怎么查原因?

oracleperl 2018-07-02 10:10:20
我的程序在运行时,出现提示:”程序名已停止工作“
"由于出现问题,程序停止正常工作,windows将关闭程序,并会在有可用的解决方案时通知你?

然后两个按钮,
调试,关闭程序
我该怎么查出原因

问题是,同一个程序,操作同一个文件,有的时候报错,有的时候不报错
不是必然出现
...全文
2997 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2018-07-03
  • 打赏
  • 举报
回复
生成、配置管理器、活动解决方案平台、<新建...>、键入或选择新平台、x64、……
oracleperl 2018-07-03
  • 打赏
  • 举报
回复
引用 14 楼 zhao4zhong1 的回复:
[quote=引用 13 楼 oracleperl 的回复:] [quote=引用 10 楼 zhao4zhong1 的回复:] 崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止
赵老师,我是new一个比较大的内存,比如1G,就奔溃了,如果new 500M,就没事 我想是不是我没编译成64程序造成? [/quote] 可以编译成64位试试看。 容量大小从小到大:栈≤全局数据≤堆≤文件≤硬盘≤磁盘阵列≤云存储 当程序需要使用比如2GB~1TB左右的存储时,最简单的办法恐怕得是用文件读写模拟内存读写了吧。windows参考_fseeki64函数,linux参考fseeko64函数。
FILE *fA;fA=fopen("A","rb+");_fseeki64(fA,10000000000i64*sizeof(int),SEEK_SET);fputc(fA,0);//int A[10000000000];
int B;
_fseeki64(fA,9999999999i64*sizeof(int),SEEK_SET);fread(&B,1,sizeof(int),fA);//B=A[9999999999];
_fseeki64(fA,9999999999i64*sizeof(int),SEEK_SET);fwrite(&B,1,sizeof(int),fA);//A[9999999999]=B;
fclose(fA);
[/quote] 谢谢赵老师 我的是WIN10 64位,机器也是64位的,装的VS2010,我知道VS2010是32位应用 我不知道如何把我的CPP程序用VS2010编译成64程序 能否指点一下,非常感谢赵老师。。
赵4老师 2018-07-03
  • 打赏
  • 举报
回复
引用 13 楼 oracleperl 的回复:
[quote=引用 10 楼 zhao4zhong1 的回复:]
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止

赵老师,我是new一个比较大的内存,比如1G,就奔溃了,如果new 500M,就没事
我想是不是我没编译成64程序造成?

[/quote]
可以编译成64位试试看。
容量大小从小到大:栈≤全局数据≤堆≤文件≤硬盘≤磁盘阵列≤云存储
当程序需要使用比如2GB~1TB左右的存储时,最简单的办法恐怕得是用文件读写模拟内存读写了吧。windows参考_fseeki64函数,linux参考fseeko64函数。
FILE *fA;fA=fopen("A","rb+");_fseeki64(fA,10000000000i64*sizeof(int),SEEK_SET);fputc(fA,0);//int A[10000000000];
int B;
_fseeki64(fA,9999999999i64*sizeof(int),SEEK_SET);fread(&B,1,sizeof(int),fA);//B=A[9999999999];
_fseeki64(fA,9999999999i64*sizeof(int),SEEK_SET);fwrite(&B,1,sizeof(int),fA);//A[9999999999]=B;
fclose(fA);

oracleperl 2018-07-03
  • 打赏
  • 举报
回复
引用 10 楼 zhao4zhong1 的回复:
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止
赵老师,我是new一个比较大的内存,比如1G,就奔溃了,如果new 500M,就没事 我想是不是我没编译成64程序造成?
oracleperl 2018-07-02
  • 打赏
  • 举报
回复
我的编译过程是这样的 D:\VS2010\Common7\Tools\vsvars32.bat cl /EHsc test.cpp
oracleperl 2018-07-02
  • 打赏
  • 举报
回复
引用 5 楼 sghcpt 的回复:
如果不能分配这么多动态内存,楼主可以试试,内存映射文件的方法来实现你的需求。。。。网上查查内存映射文件相关字眼,希望回答对你有帮助。
我i想应该是可以的,我在Linux 64位用g++编译就没问题 现在我是在win10 64位,机器也是64位的,我在想是不是我的编译方式不对,没编译成64位程序? 难道32位程序不能一次性分配1G内存吗?
sghcpt 2018-07-02
  • 打赏
  • 举报
回复
如果不能分配这么多动态内存,楼主可以试试,内存映射文件的方法来实现你的需求。。。。网上查查内存映射文件相关字眼,希望回答对你有帮助。
oracleperl 2018-07-02
  • 打赏
  • 举报
回复
引用 3 楼 sghcpt 的回复:
如果在debug调试模式下也出现该问题,可以查看出错时线程的调用堆栈,看看指向哪里代码出错了。如果是release版本的出错,在编译成功后保存相应的.pdb符号文件,然后使用vs或者windbg调试。。。
谢谢指点,我现在测试出来,我执行如下命令,已经是必然报错,就是new一个G的内存 char* bufwrite = new char[1000000000]; 然后我改成new 500M内存,就不会报错了 我是用cl命令这样编译的, cl /EHsc test.cpp 请教该如何解决呢?我的机器物理内存16G
sghcpt 2018-07-02
  • 打赏
  • 举报
回复
如果在debug调试模式下也出现该问题,可以查看出错时线程的调用堆栈,看看指向哪里代码出错了。如果是release版本的出错,在编译成功后保存相应的.pdb符号文件,然后使用vs或者windbg调试。。。
zhouqunhai 2018-07-02
  • 打赏
  • 举报
回复
我通常是打开内侧.堆栈等调试窗口,下断点,看看出错在哪一步
棉猴 2018-07-02
  • 打赏
  • 举报
回复
操作文件的时候,是不是多线程同时读写,没有同步机制?
oracleperl 2018-07-02
  • 打赏
  • 举报
回复
环境 win10 专业版 64位 VS2010(32应用)编译
bprimer 2018-07-02
  • 打赏
  • 举报
回复
依赖的lib或dll不存在可能导致这个问题。
你可以debug程序即可。
赵4老师 2018-07-02
  • 打赏
  • 举报
回复
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止
oracleperl 2018-07-02
  • 打赏
  • 举报
回复
引用 8 楼 sghcpt 的回复:
楼主,想把程序编译成64位的方法,可以参考一下面链接: https://www.cnblogs.com/qingyuanjushi/p/5722884.html https://www.cnblogs.com/gis-flying/p/3898127.html
谢谢大侠,我的是VS2010
sghcpt 2018-07-02
  • 打赏
  • 举报
回复
楼主,想把程序编译成64位的方法,可以参考一下面链接:
https://www.cnblogs.com/qingyuanjushi/p/5722884.html
https://www.cnblogs.com/gis-flying/p/3898127.html

65,179

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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