harry47341
harry47341

Reputation: 25

Reversing an Array Results In SegFault

  #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;
}

I have no idea why it says segmentation fault even before i start debugging it. I compile another one on calculating the frequency of 1, 5, and 10 in an array of k numbers, and it says the same thing... Here is the other one:

    #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;
}

Please help me. Thanks.

Upvotes: 0

Views: 63

Answers (2)

long_form
long_form

Reputation: 86

Both your programs have two major faults.

  1. You need to know the size of an array while creating it. In your code, k is still uninitialized and you are using this value as the size of your array. Instead, change it to

    int k,i,m,n;
    cin >> k;
    int in[k];
    int reversea[k];
    
  2. While reversing the array, you should be filling reversea using values from in, and not the other way round. Also, you don't need 2 for loops, just use 1 for loop.

    for (m=k-1; m>=0; m--){
      reversea[m] = in[k-1-m];       
    }
    
  3. In the second program, you again need to get the value of k before creating the array input[k].

  4. You are testing for equality with a = instead of == . Change your code from

    if (input[i]=1){
    

    to

    if (input[i] == 1) {
    

Upvotes: 3

Cory Kramer
Cory Kramer

Reputation: 118001

On this line

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

How are you supposed to initialize an array with k elements if k isn't initialized? The size of an array must be known at compile time not run time. If k isn't know until run time, use a std::vector

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

Upvotes: 5

Related Questions