gpt4 book ai didi

c - 动态分配二维数组时出现段错误

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

我很确定那些知道如何使用指针的人会对我生气,因为这似乎是一个已经回答的问题,但我无法理解我在这个三重指针上做错了什么......所以我是提前道歉......

我正在尝试通过此函数动态分配二维数组:

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

float **alloctab(int dim1, int dim2) {
float **ptr;

ptr = malloc(dim1*sizeof(float *));
if (ptr != NULL) {
int i, taille_ligne = dim2*sizeof(float);
float *tmp = malloc(dim1*taille_ligne);
if (tmp != NULL) {
for (i=0; i<dim1; i++) {
ptr[i] = tmp;
tmp += dim2;
}
}
else
ptr = NULL;
}
return(ptr);
}

int call_alloc(float ***ptr, int d1,int d2)
{
int i,j;
*ptr = alloctab(d1,d2);

for (i=0;i<d1;i++)
for (j=0;j<d2;j++)
{
*ptr[i][j]=(float)i+(float)j;
printf("ptr[%d][%d]=%f\n",i,j,*ptr[i][j]);
}
return 0;
}

int main()
{
float ***tab = NULL;
int d1=6,d2=8;
call_alloc(tab,d1,d2);
return 0;
}

当然,我在使用它时遇到了段错误,尽管 -Wall 模式下的编译器不会提示任何事情......

感谢您的帮助!!

最佳答案

您的代码中有两个错误:。

  1. *ptr[i][j](*ptr)[i][j]
  2. 不同
  3. float ***tab = NULL; call_alloc(tab,d1,d2); 将 NULL 指针传递给函数 call_alloc

像这样调整你的代码:

int call_alloc(float ***ptr, int d1,int d2)
{
int i,j;
*ptr = alloctab(d1,d2);

for (i=0;i<d1;i++)
{
for (j=0;j<d2;j++)
{
(*ptr)[i][j]=(float)i+(float)j;
// ^ ^
printf("ptr[%d][%d]=%f\n",i,j,(*ptr)[i][j]);
// ^ ^
}
}
return 0;
}

int testmain()
{
float **tab = NULL;
// ^^
int d1=6,d2=8;
call_alloc(&tab,d1,d2);
// ^
return 0;
}

请注意,您的代码不会释放内存。

关于c - 动态分配二维数组时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35101251/

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