gpt4 book ai didi

c - 将三重指针传递给函数,然后分配一个二维数组

转载 作者:行者123 更新时间:2023-11-30 18:29:49 25 4
gpt4 key购买 nike

出现段错误并且不明白为什么,必须传递三重指针进行赋值,因此无法更改...

这是函数

    void alloc2d(double*** a, int m, int n) {
int i, j;

**a = malloc(sizeof(double *) * m);
a[0] = malloc(sizeof(double) * n * m);

for(i = 0; i < m; i++)
a[i] = (*a + n * i);
}

这是函数的调用...

double** m;
alloc2d(&m, 5, 10);

double count = 0.0;

for (int i = 0; i < 5; i++)
for (int j = 0; j < 10; j++)
m[i][j] = ++count;

for (int i = 0; i < 5; i++)
for (int j = 0; j < 10; j++)
printf("%f ", m[i][j]);

最佳答案

您想要为a引用的指针分配内存。将 **a = malloc(sizeof(double *) * m); 更改为 *a = malloc(sizeof(double *) * m);。您已经为 a[0] 分配了内存,因此从索引 1 开始循环。 a[0]*a 类似,类型是 double**,但你想将指针设置为 a[0] 指的是。将 a[0] 更改为 (*a)[0],将 a[i] 更改为 (*a)[i] 。像这样调整您的代码:

void alloc2d(double*** a, int m, int n) {

*a = malloc( sizeof( double* ) * m ); // allocate the memory for (m) double*

(*a)[0] = malloc( sizeof(double) * n * m ); // allocate the linearized memory for (n*m) double

for( int i=1; i<m; i++ )
(*a)[i] = (*a)[0] + n*i; // initialize the pointers for rows [1, m[
}

我认为这样会更容易理解:

void alloc2d(double*** a, int m, int n) {

double **temp = malloc( sizeof( double* ) * m ); // allocate the memory for (m) double*

temp[0] = malloc( sizeof(double) * n * m ); // allocate the linearized memory for (n*m) double
for ( int i=1; i<m; i++ )
temp[i] = temp[0] + n*i; // initialize the pointers for rows [1, m[

*a = temp; // assign dynamic memory pointer to output parameter
}

关于c - 将三重指针传递给函数,然后分配一个二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35116623/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com