tmathmeyer
tmathmeyer

Reputation: 53

Array Creation in C++

What I'm Essentially trying to do is write a function that can take an array of length n, and make an array of say, length n-2. here is the code i have so far:

float* comp_arr(float vals[], int arr_size, float scale, float dim){

    int arr_dim = (int)(arr_size+1-2*scale);
    float curvs[arr_dim];

    for(int i = scale; i < sizeof(vals)-scale+1; i++){
            float cur = comp_cur((i-scale)*dim, vals[i-1], i*dim, vals[i], (i+scale)*dim, vals[i+1]);
            int new_index = (int)(i-scale);
            curvs[new_index] = cur;
            printf("%f\n",cur);
    }
    return curvs;
}

Ive been calling it in the main function like this:

main(){
    float vals [] = {2,3,6,1,7};
    float *curvs = comp_arr(vals,5,1.0,1.0);
}

but i get this error:

comp.cpp: In function ‘float* comp_arr(float*, int, float, float)’:
comp.cpp:35:8: warning: address of local variable ‘curvs’ returned [enabled by default]
/tmp/ccrDJjYq.o: In function `comp_arr(float*, int, float, float)':
comp.cpp:(.text+0x590): undefined reference to `__cxa_end_cleanup'
/tmp/ccrDJjYq.o:(.ARM.extab+0xc): undefined reference to `__gxx_personality_v0'
collect2: ld returned 1 exit status

I'm pretty new to C++, what am i doing wrong?????

Upvotes: 1

Views: 185

Answers (2)

ryanbwork
ryanbwork

Reputation: 2153

The curvs array is a local variable within the comp_arr function. The first warning is being thrown because as soon as this function returns, the memory that it was using (which includes the curvs array) will go out of scope. Referencing the returned array in your main will cause undefined behavior; if you'd like to return an array from a function, you'll have to dynamically allocate it via new/malloc.

Upvotes: 1

JBentley
JBentley

Reputation: 6260

You're returning a pointer to a local variable. As soon as the closing brace of your comp_arr function is reached, curvs is out of scope and no longer exists, yet you are returning it's address. The program might even behave correctly if the data is still present in memory, but it could be overwritten at any time.

Upvotes: 0

Related Questions