gpt4 book ai didi

c - 如何使用通过引用传递给 C 中的函数的指针来 malloc 二维锯齿状数组

转载 作者:太空狗 更新时间:2023-10-29 15:55:32 25 4
gpt4 key购买 nike

我在 main() block 中声明了一个二维锯齿状数组。这将传递给函数以为其分配内存。以下是编译但运行时崩溃的最简化情况。我哪里错了?

#include <stdio.h>
#include <stdlib.h>

void alloc2d(double ***p);


int main () {

double **data;

alloc2d(&data);
printf("Before assign to data\n");
data[0][0] = 0.1;
printf("After assign to data\n");
free(data);
}


void alloc2d(double ***p) {

int i, n, m;

// Get some dynamically assigned sizes
printf("Enter size: ");
scanf("%d %d", &n, &m);
// Now allocate
*p = malloc(n * sizeof(double*));
for (i = 0; i < n; i++) {
*p[i] = malloc(m * sizeof(double));
}
printf("End of alloc2d\n");
}

这会读取值,但当我输入小数(即“1 1”)时崩溃,但当我输入大数(即“10 10”)时崩溃。

最佳答案

你犯了一个非常简单的语法错误

*p[i] = (double*)malloc(m * sizeof(double));

应该是

(*p)[i] = (double*)malloc(m * sizeof(double));

这是因为在 C 中,[] 运算符的优先级高于 *。所以当你输入*p[i]时,它被翻译成**(p + i)

这意味着:你要求编译器通过将 p 的地址偏移 i * sizeof(double**) 来计算地址,这显然不是你真正想要的。

因此,为了强制编译器首先取消引用 p,只需将 *p 括起来即可。

关于c - 如何使用通过引用传递给 C 中的函数的指针来 malloc 二维锯齿状数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12958583/

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