有没有办法根据t确定数组的大小

时间:2013-05-10 13:55:08

标签: c arrays size

我写了一个函数来计算数组和这个数组本身之间的外部差异,并且只保存那些积极的结果(参见下面的代码)

void outer_pos(double *x, int *n, double *output){
    int i, j, l;
    for(i=0, l=0; i<*n; i++){
        for(j=0; j<*n; j++){
            if((x[j]-x[i])>0){
                output[l+1]=x[j]-x[i];
                output[0]=(double)(++l);
            }
        }
    } 
}

然后,在下面的函数中,我调用outer_pos。一个问题是数组xouter可能包含绑定值。如果没有绑定值,则正差异的数量为( nsamp)(* nsamp-1)/ 2,但是对于绑定值,实际数量较小。所以我想知道是否有任何方法可以声明v1v2,使得大小取决于outer_pos的结果。我主要使用R,它不需要你初始化一个数组,所以我不确定如何在C中完成。

void foo(double *x, double *y, int *nsamp){
    int i, j, k, oper=2, l;
    double* result=malloc(sizeof(double)*((*nsamp)*(*nsamp-1)/2 + 1));
    double* xouter=malloc(sizeof(double)*(*nsamp));

    for(i=0;i<*nsamp;i++) 
         xouter[i]=x[i]+y[i];

    outer_pos(xouter, nsamp, &result[0]);

    free(xouter);    
        .
        .
        .
        .
}

1 个答案:

答案 0 :(得分:1)

  1. 尝试calloc()而不是malloc并为outer_pos()中的输出分配内存

    void outer_pos(double *x, int *n, double *output){
        int i, j, l;
        &output[0]=malloc(sizeeof(double));
        for(i=0, l=0; i<*n; i++){
            for(j=0; j<*n; j++){
                if((x[j]-x[i])>0){
                    &output[l+1]=malloc(sizeeof(double));
                    output[l+1]=x[j]-x[i];
                    output[0]=(double)(++l);
                }
            } 
        }
    }