c语言动态二维数组分配子函数,在主函数中无法正常访问

来源:百度知道 编辑:UC知道 时间:2024/06/15 22:19:19
#include <stdio.h>
#include <stdlib.h>
#define FALSE -1

/*动态分配二维数组,即row*column的矩阵 */
int MatrixDynAllot(int row, int column, double **pArray )
{
int ncount, i, j;
void **ptdhead;
void **ptdBody;

ptdhead = (void **)malloc(sizeof(void*)*row + sizeof(double)*row*column);
if(!ptdhead)
{
return FALSE;
}
ptdBody = ptdhead + row;
for(ncount = 0; ncount < row; ncount++)
ptdhead[ncount] = ptdBody + ncount * column * sizeof(double)/sizeof(void*);
pArray = (double **)ptdhead;
ptdhead = NULL;
for(i = 0; i < row; i++ )
{
for(j = 0; j< column; j++)
{
pArray[i][j] = 0;
}
}
return 0;
}

int main()
{
int i, j;
int row, column;
double **pArray;
row = 5;
column = 8;
MatrixDynAllot( row, column, pArray);
for( i = 0; i<row; i++)
{
for(

这肯定访问不了啊。。 你得清楚, 任何语法都得遵循一些基本原则,不可能凭空变出魔术来。。

c语言里本质上说,任何传递都是传值(忘记谭浩强C吧。。), 你传一个pArray进去相当于给他一个没初始化过的地址, 这有什么用? 然后在里面你给那个形式参数赋值。 这当然也没什么用, 形式参数的改变跟实际参数本身无关
如果你想传信息出来, 你必须传进去一个有效的指针, 这样函数里可以根据这个有效的指针的值(也就是有效的指针指向的内存地址),把回传的数据填写到这个地址, 这样函数调用结束后, 调用函数可以根据这个指针的值,到这个地址去找你传出来的东西。

解决方法就是把分配后的地址return回来啊。
double ** MatrixDynAllot(int row, int column )

把pArray设为全局量,动态分配。不用时再取消分配的单元。

#include <stdio.h>

double **pArray;

int MatrixDynAllot(int row, int column )
{
int i,j;
pArray = (double **) malloc(sizeof(double *) * row);
for (j=0;j<row;j++){
pArray[j] = (double *) malloc(sizeof(double) * column);
}
if (!pArray){printf("no enough memory....\n");};
for(i = 0; i < row; i++ )
{
for(j = 0; j< column; j++)
{
pArray[i][j] = 0;
}
}
return 0;
}

int main()
{
int i, j;
in