zoukankan      html  css  js  c++  java
  • 奇怪的错误与原因

    下面的程序出现了奇怪的错误:主要原因是对数组的定义理解不透彻,程序中的b[2][100];只含有2个一维数组b[0]和b[1],根本没有定义b[2],当然也不会给它初始化,所以运行时会出现意料之外的错误。

    #include<cstdio>
    #include<iostream>
    #include<cstring>
    using namespace std;
    int a[100],b[2][100];
    int n,s=0;
    void dfs(int cur){
     cout<<n<<endl;
     if (cur==n){
      for (int i=1;i<n;i++)cout<<a[i]<<" ";
      cout<<a[n]<<endl;
      s++;
      return;
     }
     for (int i=1;i<=n;i++)
      if(!b[0][i]&&!b[1][cur+1-i+n]&&!b[2][cur+1+i]) {
       a[cur+1]=i;
       b[0][i]=1;
       b[1][cur+1-i+n]=1;
       b[2][cur+1+i]=1;
       dfs(cur+1);
       b[0][i]=0;
       b[1][cur+1-i+n]=0;
       b[2][cur+1+i]=0;
      }
    }
    int main(){
     memset(a,0,sizeof(a));
    // memset(b,0,sizeof(b));//初始化后b[2]并不是0,
     cin>>n;
     cout<<n<<endl;
     for (int i=0;i<=2;i++){ 
      for (int j=0;j<=n+n;j++) b[i][j]=0;
       cout<<i<<":"<<n<<endl;//n在i=2后为什么会变为0
     }
     
     dfs(0);
     cout<<n<<endl;
     cout<<s<<endl;
     return 0;
    }

    解决方法:变量定义的位置交换,先定义变量后定义数组,问题解决?可这是为什么呢,难道系统会给不同的变量分配相同的存储空间?但是用memset赋值还是会出错呢?

    #include<cstdio>
    #include<iostream>
    #include<cstring>
    using namespace std;

    int n,s=0;
    int a[100],b[2][100];

    void dfs(int cur){
     cout<<n<<endl;
     if (cur==n){
      for (int i=1;i<n;i++)cout<<a[i]<<" ";
      cout<<a[n]<<endl;
      s++;
      return;
     }

  • 相关阅读:
    DIY组装机
    伯努利数学习笔记的说...
    心得分享 | 软件研发效能(1)
    开发板烧录教程
    解决Windows7/10系统连接网线后显示“未识别的网络”的问题
    雷达扫描
    经验学习
    1045 Access denied for user 'root'@'localhost' (using password:YES)
    json格式化工具
    mysql安装出现error Nr.1045
  • 原文地址:https://www.cnblogs.com/ssfzmfy/p/4646350.html
Copyright © 2011-2022 走看看