【发布时间】:2012-04-04 13:30:01
【问题描述】:
我有一个代码段,它生成一个随机数的动态 3D 数组并将其分配给一块内存。我想我是正确的,但我如何测试它是否都位于一个连续的内存块中?有办法吗?我有一个 cout 函数,可以将每个元素的地址打印到屏幕上,它似乎是正确的,但我不能确定。我知道我也必须再次释放内存,但这会在以后发生。
#include <cstdlib>
#include <cstdio>
#include <iostream>
#include <ctime>
using namespace std;
int main()
{
int ***dyn_array;
int **buffer_1;
int i;
int j;
int k;
int *buffer=new int[5*3*2];//Create a buffer for a block of memory
dyn_array = new int**[5];
buffer_1 = new int *[3];
srand(time(NULL));
cout<<"The address of the buffer is: "<<buffer<<endl;
for(i=0;i<5;i++)
{
dyn_array[i] = &buffer_1[i*3];
for(j=0;j<3;j++)
{
dyn_array[i][j] = &buffer[j*2];
}
}
for(i=0; i<5; i++)
{
for(j=0; j<3; j++)
{
for(k=0; k<2; k++)
{
dyn_array[i][j][k]=rand()%40;
cout<<"dyn array ["<<i<<"]["<<j<<"]["<<k<<"] is: "<<dyn_array[i][j][k]<<endl;
cout<<"Memory Address is: "<<&dyn_array[i][j][k]<<endl;
}
}
}
return 0;
}
【问题讨论】:
-
您的代码存在一些问题。例如 buffer_1[i*3]: i*3 可以达到 12,但 buffer_1 的大小只有 3。
-
for(i=0;i<5;i++) { dyn_array[i] = &buffer_1[i*3];你想在这里做什么?buffer_1已为 3 个指针分配空间。 -
@Vaughn Cato 我基本上是在尝试将 3D 数组分配给将包含所有元素的缓冲区。我可以用 2D 数组来做,但我认为这是用 3D 数组做的正确步骤
标签: c++ memory-management multidimensional-array