getting no result in terminal window

0

I have just started coding in C++ and I am using codeblocks. My build log is giving me 0 errors and 0 warning but I do not know why when I run it, it is giving me no result in the terminal. Terminal Window Result:

Process returned -1073741571 (0xC00000FD) execution time : 1.252 s Press any key to continue.

my code:

    #include <iostream>
    #include<math.h>
    using namespace std;
    int main() {
    int n;
    cin>>n;

    int a[n];
    for(int i = 0; i <n ; i++){
        cin>>a[i];
    }
    const int N = pow(10, 6);
    int idx[N];
    for(int i = 0; i< N; i++){
        idx[i] = -1;
    }

    int minidx = INT_MAX;

    for(int i = 0; i<n; i++){
        if(idx[a[i]] != -1){
            minidx = min(minidx, idx[a[i]]);
        }
        else{
            idx[a[i]] = i;
        }
    }
    if (minidx == INT_MAX){
        cout<<"-1"<<endl;
    }
    else{
        cout<<minidx+1<<endl;
    }
    return 0;
}

Please help me in finding my mistake in the code.

c++
codeblocks
asked on Stack Overflow Nov 12, 2020 by Siddharth Singh • edited Nov 12, 2020 by gaurav bharadwaj

1 Answer

0

This:

int n;
std::cin >> n;

int a [n];

for (int i = 0; i < n ; i++) {
    std::cin >> a [i];
}

is bad practice. Don't use VLAs whose size you don't know at compile time. Instead, if I guess correctly that this is some Competitive Programming problem, you'll probably know what the max size will be as stated in the problem. So, do it this way instead:

int n;
std::cin >> n;

constexpr int max_size = 1000000;
int a [max_size];

for (int i = 0; i < n; i++) {
    std::cin >> a [i];
}

However, even doing it this way will crash your program anyway. This is simply because of stack overflow when you declare an array that size inside a function. For slightly smaller sizes however, that would be okay. Just don't use VLAs the way you're using them.

One solution is to use a standard container like std::vector as the allocation takes place on the heap. Note that using std::array will crash too as the allocation is not on the heap.

Another solution is to make your array a global. This way you can increase to sizes well over 1e6. Not really recommended though.

In your code above, irrespective of what the size n for array a is (even if it's a fairly small size to fit on the stack), your code will definitely crash when you declare the array idx [1000000]. Reason is the same, stack overflow.

Also, please post indented code and use good indentation practices.

answered on Stack Overflow Nov 12, 2020 by Lost Arrow

User contributions licensed under CC BY-SA 3.0