大家好,我有一个小问题。我正在创建一个接收双指针作为参数的函数。该函数接收参数并为其分配动态内存。分配内存后,我会调用另一个函数,为该指针赋值。但是在进行赋值时,我得到一个分段错误,我怀疑问题出在指针作为参数的传递中,因为当我在main
其中而不是在函数中做所有事情时,它不会出现问题。我通过代码,所以有人可以指导我。
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define dim 100
void asignarMemoriaDinamica(double** A){
int i;
A=malloc(dim*sizeof(double*));
for(i=0;i<dim;i++){
A[i]=malloc(dim*sizeof(double));
}
}
void cargarA(double** A){
int i,j;
srand(time(NULL));
for(i=0;i<dim;i++){
for(j=0;j<dim;j++){
int test = rand()%200 -100;
A[i][j]=test; //al ejecutar esta linea da error
printf("%.2lf ",A[i][j]);
}
printf("%s","\n");
}
}
int main() {
double **A;
asignarMemoriaDinamica(A);
cargarA(A);
return 0;
}
正如我在另一个问题中已经提到的......
中的更改
A
仅是本地的。为了使更改反映在函数之外,您必须使用额外的间接级别(在本例中为三指针):在函数
cargarA
中,您不会遇到这个问题,因为您没有更改指向的地址,A
而是直接在指向的内存上工作A
(这不是一回事)。这个新功能叫什么?