1

我基本上想做的是编写一个函数,它可以采用长度为 n 的数组,并制作一个长度为 n-2 的数组。这是我到目前为止的代码:

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

我一直在这样的主函数中调用它:

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

但我收到此错误:

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

我对 C++ 很陌生,我做错了什么??????

4

2 回答 2

1

curvs数组是 comp_arr 函数中的一个局部变量。第一个警告被抛出,因为一旦这个函数返回,它正在使用的内存(包括curvs数组)将超出范围。在 main 中引用返回的数组将导致未定义的行为;如果你想从一个函数返回一个数组,你必须通过 new/malloc 动态分配它。

于 2013-02-12T18:59:04.787 回答
0

您正在返回一个指向局部变量的指针。一旦comp_arr到达函数的右大括号,curvs就超出范围并且不再存在,但您正在返回它的地址。如果数据仍然存在于内存中,程序甚至可能会正确运行,但它可能随时被覆盖。

于 2013-02-12T18:58:50.880 回答