还是一个分配内存的问题,关于三维数组!

arpoul 2003-03-22 05:51:20
需要动态分配一个三维数组,形如A[m][n][3],而且要求内存连续分配,m,n为变量,这个new怎么写呀?关键现在是两个变量,要是一个倒是好办了
二维可以这么写
float (*p)[3] = new float[m_CtrlPointCount][3];
三维怎么写呀?
...全文
56 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
warmworm 2003-03-25
  • 打赏
  • 举报
回复
先给vector进行resize,得到是连续的地址
dsangvei 2003-03-25
  • 打赏
  • 举报
回复
如果不是一次malloc的,内存在字节上就不是连续的了。它必须有个头,操作系统上有讲
vector分配的内存在字节上不是连续的。因为它要动态增长。
arpoul 2003-03-22
  • 打赏
  • 举报
回复
你还是把三维降了一维,不过置顶的帖子我看明白了,理论上让它动态分配两维是不可能的。只有降维处理.或者分配的就不连续了

如果用vector<vector<int[3]>>可以连续分配吗?
prettynacl 2003-03-22
  • 打赏
  • 举报
回复
看看这样行不?为p[m][n][3]动态分配内存。
#include "stdio.h"
#include "stdlib.h"

main()
{

int ***p = NULL;
int *tmp = NULL,i,j,k, m = 5, n = 4;
p = (int ***)malloc(sizeof(int **) * m);
tmp = (int *)malloc(sizeof(int) *m*n*3);

for(i =0; i< m; i++) {
p[i] = (int **)malloc(sizeof(int *) *n);
for (j = 0; j < n; j++) {
p[i][j] = tmp + (i * n *3 ) + j * 3;
}
}
for (i = 0; i < m ; i ++){
for (j = 0; j < n; j ++) {
for (k = 0; k < 3; k ++) {
p[i][j][k] = i *100 + j *10 + k;
}
}
}
for ( i = 0; i < m *n *3; i ++) {
printf("%d\n",*(tmp + i ));
}
for (i = 0; i < m; i ++) {
free(p[i]);
}

free (p);
free (tmp);
exit(0);
}
dsangvei 2003-03-22
  • 打赏
  • 举报
回复
int a=p[m*n-1][10]);
dsangvei 2003-03-22
  • 打赏
  • 举报
回复
1. vector<vector<int> >(m,vector<int>(n));
2. typedef int(*p2)[10]; //两维指针
p2 p=new int[m*n][10];

int a=*(p[m-1][n][10]);

arpoul 2003-03-22
  • 打赏
  • 举报
回复
不是的,三维中有两维是动态的,
m=10;
int (*p)[3][3] = new int[m][3][3];当然可以,

但现在是:
比方说m=10,n=5;
int (这里我不知怎么写) = new int[m][n][3];m和n是参数传进来的.如何分配内存,而且还要求必须连续分配
yzb1000 2003-03-22
  • 打赏
  • 举报
回复
up
dsangvei 2003-03-22
  • 打赏
  • 举报
回复
typedef int(*p)[2][3];//3维,其它自己加

p d=new int[1][2][3];

参考一下置顶帖子:多维数组如何在堆中声明 ??
arpoul 2003-03-22
  • 打赏
  • 举报
回复
c当然可以,不就是new换成molloc吗?改动不是很大,关键是思路:)
bsautoland 2003-03-22
  • 打赏
  • 举报
回复
c行么?

70,037

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧