在SegFault中反转数组结果

时间:2015-08-13 22:58:43

标签: c++

  #include <iostream>

using namespace std;

/*
 * 
 */
int main() {
    int k, in[k],reversea[k],i,m,n;
    cin>>k;
    for (i=0;i<k;i++){
        cin>>in[i];
    }
    for (m=k-1;m>=0;m--){
        for (n=0;n<k;n++){
            in[m]=reversea[n];
        }
    }
    for(i=0;i<k;i++){
        cout<<reversea[i];
    }

    return 0;
}

我甚至在开始调试之前就不知道它为什么会出现分段错误。我在计算k数字数组中的1,5和10的频率时编译另一个,它说同样的事情...... 这是另一个:

    #include <iostream>

using namespace std;

int main() {
    int k,i,m,n,count5,count1,count10;
    int input[k];
    cin>>k;
    for (i=0;i<k;i++){
        cin>>input[i];
    }//input all the numbers
    for(i=0;i<k;i++){
        if (input[i]=1){
            count1++;
        }
        if (input[i]=5){
            count5++;
        }
        if (input[i]=10){
            count10++;
        }
    }
    cout<<count1<<"\n"<<count5<<"\n"<<count10<<"\n";
    return 0;
}

请帮帮我。感谢。

2 个答案:

答案 0 :(得分:5)

在这一行

int k, in[k],reversea[k]

如果未初始化k,您应该如何使用k元素初始化数组?必须在编译时而不是运行时中知道数组的大小。如果在运行时才知道k,请使用std::vector

int k;
std::cin >> k;
std::vector<int> in(k);
std::vector<int> reversea(k);

答案 1 :(得分:3)

您的程序都有两个主要错误。

  1. 创建数组时需要知道数组的大小。在您的代码中,k仍然未初始化,您使用此值作为数组的大小。相反,将其更改为

    int k,i,m,n;
    cin >> k;
    int in[k];
    int reversea[k];
    
  2. 在反转数组时,您应该使用in中的值填充reversea,而不是相反。此外,你不需要2个循环,只需使用1个循环。

    for (m=k-1; m>=0; m--){
      reversea[m] = in[k-1-m];       
    }
    
  3. 在第二个程序中,您需要在创建数组输入[k]之前再获取k的值。

  4. 您正在使用=而不是==来测试相等性。从

    更改您的代码
    if (input[i]=1){
    

    if (input[i] == 1) {