realloc2d与函数

realloc2d与函数,c,function,realloc,C,Function,Realloc,我想在与main不同的函数中重新定位2D矩阵,但不幸的是,我得到了一个无效的指针错误。我读过其他答案,但我看不出我的错误在哪里。我的代码是: void example(double* w, size_t s){ w=realloc(w,(s+1)*sizeof(double)); w[s]=3; } int main(int argc, char *argv[]){ double w[100][1]; int i; for(i=0;i<100;i

我想在与main不同的函数中重新定位2D矩阵,但不幸的是,我得到了一个无效的指针错误。我读过其他答案,但我看不出我的错误在哪里。我的代码是:

void example(double* w, size_t s){
    w=realloc(w,(s+1)*sizeof(double));
    w[s]=3;
}

int main(int argc, char *argv[]){
    double w[100][1];
    int i;

    for(i=0;i<100;i++){
        example(w[i],sizeof(w[i])/sizeof(w[i][0])
    }

    free(w);
    return 1;
}
void示例(双*宽,大小){
w=realloc(w,(s+1)*sizeof(双重));
w[s]=3;
}
int main(int argc,char*argv[]){
双w[100][1];
int i;

对于(i=0;iw指针不是动态分配的(它不是来自realloc或malloc)因此,将其作为参数传递给realloc是无效的。此外,如果要在main中释放新指针,则需要将其传递回main。

在realloc或释放内存之前,需要分配内存。此外,对于每次分配内存以释放它的迭代,您可以释放(w)但它所做的只是删除对的内存引用,而不是实际释放所有内存。对于malloc或realloc的所有内容,您需要返回并释放它,以避免内存泄漏。您需要一个类似于示例的函数,但要释放所有内存,而不是分配内存


只是我的想法

w
example
中的一个局部变量。对它的所有更改都是函数的局部更改。在运行时,最好使用example(&w[i],“分配所需的双倍数”);每个malloc()或realloc()来知道(w[i][0]的大小需要检查返回代码以确保操作成功。分配w数组后,需要将所有条目设置为NULL。因此(在main()的末尾)所有内存分配都可以传递给free(),首先是辅助指针,(w[x]),然后是指向w的指针此行:free(w);必须在通过(i=0;i)释放所有子内存分配后使用
int main(int argc, char *argv[]){
    double **w;
    int i;

    w=malloc(100*sizeof(double *));

    for(i=0;i<100;i++){
        w[i]=malloc(1*sizeof(double));
        example(w[i],sizeof(w[i])/sizeof(w[i][0])
    }

    free(w);
    return 1;
}