关于linux下c++的“浮点数例外(核心已转储)”问题

gynnash 2013-03-24 04:26:50
如题。
写了一个程序如下,然后main函数里循环执行:

void randomG(vector<int>& vec){
vec.clear();
int a = rand()%500;
int b=0, c=0;
while((b=rand()%500) ==a){}
c=rand()%100;

vec.push_back(a);
vec.push_back(b);
vec.push_back(c);
}

int main(int argc, char** argv){
vector<int> vec;
srand((unsigned)time(NULL));
while(/*condition*/){
randomG(vec);
print(vec);
/* other statments */
}
}
差不多是这样。但编译通过后运行一段时间后出现“浮点数异常(核心已转储)”这个错误,并且有时出现有时不出现,并且不一定在什么时候出现,这是什么问题?
顺便问一下,为什么srand((unsigned)time(NULL))这句话放在main()函数里就可以产生随机数,放在randomG()函数里就只产生相同的数?
谢谢各位了!
...全文
1387 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2013-03-25
  • 打赏
  • 举报
回复
进程意外退出会在当前目录下产生形如‘core.数字’的文件比如‘core.1234’ 使用命令 gdb 运行程序名 core.数字 进入gdb然后使用bt命令 可以查看进程意外退出前函数调用的堆栈,内容为从上到下列出对应从里层到外层的函数调用历史。 如果进程意外退出不产生core文件,参考“ulimit -c core文件最大块大小”命令
乔巴好萌 2013-03-24
  • 打赏
  • 举报
回复 1
core是用来调试的 如果已经产生异常了 就不用再配置了 只需要在编译时 加入-g选项 g++ main.cpp -o main -g 然后调试的时候 gdb main core(产生的core文件)即可看到异常时的堆栈
mujiok2003 2013-03-24
  • 打赏
  • 举报
回复
引用 1 楼 mujiok2003 的回复:
看一下core

//to capture core files 
ulimit -c unlimited your_app
//view a  core file with gdb
gdb -q your_app corefile
//bt 展示调用栈
gynnash 2013-03-24
  • 打赏
  • 举报
回复
int b = a%0; 这个语句是不是会出现这个错误?
gynnash 2013-03-24
  • 打赏
  • 举报
回复
引用 1 楼 mujiok2003 的回复:
看一下core
每次异常都是循环运行到randomG()函数的时候发出的,应该是这个的问题吧。这个函数上面和下面都有输出语句,所以可以看出来是恰好运行到这个函数的时候。 怎么看core?
mujiok2003 2013-03-24
  • 打赏
  • 举报
回复
你贴的代码中没有浮点数,问题在其他地方
mujiok2003 2013-03-24
  • 打赏
  • 举报
回复
看一下core

64,649

社区成员

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

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