linux下segmentation fault

MIKUMIII 2016-02-29 12:25:34
写了一个练习题,是n皇后问题,但是只要当n>=4时就会报错,不知是什么问题

#include<iostream>
#include<cmath>
using namespace std;
int n;
int* arr;
int sum=0;
bool place(int m)
{
for(int i=0;i<m;i++)
{
if(arr[i]==arr[m]||abs(i-m)==abs(arr[i]-arr[m]))
{

return false;
}

}
//cout<<"false";
return true;
}
int traceback(int m)
{
if(m==n)
{
sum++;
}
else
{
for(int i=0;i<n;i++)
{

arr[m]=i;
if(place(m)){
traceback(i+1);
}
}
}
}

int main()
{

cin>>n;
arr=new int(n);//下标为第几个,值为横轴
traceback(0);
cout<<sum<<endl;
return 0;


}
...全文
153 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
罗博士 2016-03-01
  • 打赏
  • 举报
回复
引用 3 楼 qq_27479125的回复:
arry=new int[n]分配数组空间,你那是给整形值了
正解。 再好好看一、二楼,以后这个错误完全可以自己排除。
qq_27479125 2016-03-01
  • 打赏
  • 举报
回复
arry=new int[n]分配数组空间,你那是给整形值了
cocoabird 2016-02-29
  • 打赏
  • 举报
回复
程序之所以会时不时的出现“Segmetation Fault”的根本原因是进程访问到了没有访问权限的地方,诸如内核区域或者其0x08048000之前的地方,或者由于要访问的内存没有经MMU进行映射所导致。而这种问题比较多的是出在malloc()之类的动态内存申请函数申请完内存,释放后,没有将指针设置为NULL,而其他地方在继续用先前申请的那块内存时,由于内存管理系统已经将其收回,所以才会出现这样的问题。良好的关于指针的使用习惯是,使用之前先判断其是否为NULL,所有已经归还给操作系统的内存,其访问指针都要及时置为NULL,防止所谓的“野指针”到处飞的情况
赵4老师 2016-02-29
  • 打赏
  • 举报
回复
进程意外退出会在当前目录下产生‘core’文件或形如‘core.数字’的文件比如‘core.1234’ 使用命令 gdb 运行程序名 core或core.数字 进入gdb然后使用bt命令 可以查看进程意外退出前函数调用的堆栈,内容为从上到下列出对应从里层到外层的函数调用历史。 如果进程意外退出不产生core文件,参考“ulimit -c core文件最大块大小”命令 “给定一个小点的输入,完整单步跟踪(同时按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史)一遍。”是理解递归函数工作原理的不二法门! 递归函数关注以下几个因素 ·退出条件 ·参数有哪些 ·返回值是什么 ·局部变量有哪些 ·全局变量有哪些 ·何时输出 ·会不会导致堆栈溢出

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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