伊冯_等末子
请教多维数组动态空间开辟的问题

int **a,i;

int m,n;

a=(int**)malloc(m*sizeof(int));

for(i=0;i<m;i++)

a=(int*)malloc(n*sizeof(int));

就是老师要我们设计个程序中,涉及到很多未知大小的数组,是不是可以把上面的代码放到自定的函数中去,通过调用来实现动态空间的开辟。

主要是数组太多,我不想一个一个的开辟,想就通过m,n赋值后直接实现。

请大神指教啊!!

如果不可以放在函数里【貌似是不可以,直接放进去,我试运行了下,出错了额

那有什么办法实现我说的,通过赋值m,n,然后调用函数来开辟的。

额 说的有点乱 请谅解

amosJi
当然可以
展开Biu

当然可以

[mw_shl_code=c,true]int** alloc_memory_for_2D_array(int m, int n){

int **ptr;

int i;

ptr = (int **)malloc(m*sizeof(int *));

for (i=0; i<m; i++){

ptr = (int *)malloc(n*sizeof(int));

}

return ptr;

}[/mw_shl_code]

例子:

[mw_shl_code=c,true]int **array_2d;

const int width = 10;

const int height = 20;

array_2d = alloc_memory_for_2D_array(height, width);

if (array_2d == NULL){

printf("Fail to allocate memory.");

}[/mw_shl_code]

一定不要忘记检查分配是否成功

最后还要有个函数负责free

[mw_shl_code=c,true]void free_memory_for_2D_array(int **ptr, int m){

int i;

for (i=0; i<m; i++){

if (ptr){

free(ptr);

ptr = NULL;

}

}

if (ptr){

free(ptr);

ptr = NULL;

}

}[/mw_shl_code]

[查看全文]
jinlei6394
你要知道
展开Biu

你要知道,多维数组也无非是编译器的语法糖而已。

所以实际上你可以alloc一大片内存放数据,然后再alloc一片内存放指针数组,再把指针指过去。

事实上,正常情况下是要避免多维数组的,因为出现这个东西基本代表设计不良。

类啊,结构体啊,许多东西可以避免多维数组出现。

[查看全文]
九尾阿狐
好像遇到这个应该考虑足够大
展开Biu

好像遇到这个应该考虑足够大,分配正好大小的数组···不知道能不能实现。(拙见)

[查看全文]
pefectdream
所以还要再开辟空间
展开Biu

所以还要再开辟空间 用指针指向新的空间

[查看全文]
pefectdream
其实问题很多
展开Biu

其实问题很多 你开的只是一个指向指针的指针数组 和二维数组没啥关系 你想想 如果而二维数组 num[2][2];

num[0] 中就有两个数字 而你开辟的空间 每个指针都是指向一个指针 而如果又要像二维数组那样 就要把指针指向一个科储存多个元素的指针

[查看全文]
foodszhu
那不就只有一个
展开Biu

伊冯_等末子 发表于 2013-6-8 21:41

那不就只有一个m变量了吗?我要的是二维数组额

你这样做的a,里面存的是指向数组的指针,所以m为数组个数,然后n是每个数组的大小,这样就可以定义出一个二维数组了,举个例子:

[mw_shl_code=c,true]#include <stdio.h>

#include <stdlib.h>

int main(){

int **a = NULL;

a = (int**)malloc(10 * sizeof(int*));

int i = 0, j = 0;

for(i = 0; i < 10; i++){

a = (int*)malloc((i + 1) * sizeof(int));

}

for(i = 0; i < 10; i++){

for(j = 0; j < i + 1; j++){

a[j] = i;

}

}

for(i = 0; i < 10; i++){

for(j = 0; j < i + 1; j++){

printf("%d ", a[j]);

}

printf("\n");

}

}

[/mw_shl_code]

[查看全文]
dchneric
你说不能放函数里
展开Biu

1. 你说不能放函数里,是因为你没正确地传参数进去,或者没正确地传参数回来。

2. 在这段code里,a=(int**)malloc(m*sizeof(int)); 是不对的,里面应该是m*sizeof(int*),注意区别。

3. 记得写一个对应释放空间的函数~

[查看全文]
伊冯_等末子
剩下的没什么了
展开Biu

foodszhu 发表于 2013-6-5 18:24

a=(int**)malloc(m*sizeof(int*));

剩下的没什么了

返回int**,最后记得别忘了free,而且要每个a 都要fre ...

那不就只有一个m变量了吗?我要的是二维数组额

[查看全文]