如何釋放指針的內存空間1

来源:百度文库 编辑:神马文学网 时间:2024/04/27 22:14:54
主  题:如何釋放指針的內存空間
作  者:shihyuyao (深水聲道)
等  级:
信 誉 值:95
所属论坛:C/C++ C++ 语言
问题点数:0
回复次数:7
发表时间:2005-07-28 15:17:08
float ***p;
p=new float **[4];
for(int i=0;i<4;i++)
{
p[i]=new float *[5];
for(int j=0;j<5;j++)
{
p[i][j]=new float [6];
for(int k=0;k<6;k++);
p[i][j][k]=0;
}
}
現在此指針已使用完,
如何把它刪除,
並從內存中釋放。
這是我在某論壇中看到的不過我看不懂~~
請問有人可以舉例個完整的3維指針使用 new & delete
最好能順便3維指針使用malloc() & free()給我看看
回复人:changpei(做最有气魄的诗人!) () 信誉:1002005-07-28 16:11:00得分:0
p[0][0]=new float [6];
delete[] p[0][0];
Top
回复人:hionceshine(高扬 ^_^) () 信誉:1002005-07-28 16:34:00得分:0
malloc 以及 free 是c时代的东东,他们对用户自定义类型的支持没有new & delete好, new &delete 简单来说记住使用时候的平衡性就可以了. new中用了一个[], 那么delete中肯定也得有一个.
Top
回复人:qweryuiop(dxh) () 信誉:1002005-07-28 16:50:00得分:0
大家看看 应该不应该是这个样子的啊???
float ***p;
p=new float **[4];
for(int i=0;i<4;i++)
{
p[i]=new float *[5];
for(int j=0;j<5;j++)
{
p[i][j]=new float [6];
for(int k=0;k<6;k++);
p[i][j][k]=0;
delete p[i][j];
}
delete p[i];
}
delete p;
Top
回复人:qweryuiop(dxh) () 信誉:1002005-07-28 16:51:00得分:0
不好意思 写错了
大家再看看这个
float ***p;
p=new float **[4];
for(int i=0;i<4;i++)
{
p[i]=new float *[5];
for(int j=0;j<5;j++)
{
p[i][j]=new float [6];
for(int k=0;k<6;k++);
p[i][j][k]=0;
delete[] p[i][j];
}
delete[] p[i];
}
delete[] p;
Top
回复人:lyclowlevel() () 信誉:1002005-07-28 16:53:00得分:0
直接delete []p;就可以了。以下是我做的一些测试:
#include
using namespace std;
void main()
{
int ***p;
p=new int**[4];
int i,j,k;
for(i=0;i<4;i++)
{
p[i]=new int *[5];
for(j=0;j<5;j++)
{
p[i][j]=new int[6];
for(k=0;k<6;k++)
p[i][j][k]=0;
}
}
for(i=0;i<4;i++)
{
for(int j=0;j<5;j++)
{
for(int k=0;k<6;k++)
cout<cout<}
cout<cout<cout<}
***p=0;
cout<<"size of p is: "<delete []p;
// ***p=0;
}
你只要把那个注释弄掉的话,运行的时候就会出错,这证明空间已被释放掉。
Top
回复人:lyclowlevel() () 信誉:1002005-07-28 16:58:00得分:0
我的说法是错的,sorry。
qweryuiop(dxh) ( )才是对的。你动态申请了多少次,就要delete多少次。
Top
回复人:azuresn(司空摘星) () 信誉:1002005-07-30 01:24:00得分:0
new了几次,就delete几次。基本是这样。
主  题:如何釋放指針的內存空間
作  者:shihyuyao (深水聲道)
等  级:
信 誉 值:95
所属论坛:C/C++ C++ 语言
问题点数:0
回复次数:7
发表时间:2005-07-28 15:17:08
float ***p;
p=new float **[4];
for(int i=0;i<4;i++)
{
p[i]=new float *[5];
for(int j=0;j<5;j++)
{
p[i][j]=new float [6];
for(int k=0;k<6;k++);
p[i][j][k]=0;
}
}
現在此指針已使用完,
如何把它刪除,
並從內存中釋放。
這是我在某論壇中看到的不過我看不懂~~
請問有人可以舉例個完整的3維指針使用 new & delete
最好能順便3維指針使用malloc() & free()給我看看
回复人:changpei(做最有气魄的诗人!) () 信誉:1002005-07-28 16:11:00得分:0
p[0][0]=new float [6];
delete[] p[0][0];
Top
回复人:hionceshine(高扬 ^_^) () 信誉:1002005-07-28 16:34:00得分:0
malloc 以及 free 是c时代的东东,他们对用户自定义类型的支持没有new & delete好, new &delete 简单来说记住使用时候的平衡性就可以了. new中用了一个[], 那么delete中肯定也得有一个.
Top
回复人:qweryuiop(dxh) () 信誉:1002005-07-28 16:50:00得分:0
大家看看 应该不应该是这个样子的啊???
float ***p;
p=new float **[4];
for(int i=0;i<4;i++)
{
p[i]=new float *[5];
for(int j=0;j<5;j++)
{
p[i][j]=new float [6];
for(int k=0;k<6;k++);
p[i][j][k]=0;
delete p[i][j];
}
delete p[i];
}
delete p;
Top
回复人:qweryuiop(dxh) () 信誉:1002005-07-28 16:51:00得分:0
不好意思 写错了
大家再看看这个
float ***p;
p=new float **[4];
for(int i=0;i<4;i++)
{
p[i]=new float *[5];
for(int j=0;j<5;j++)
{
p[i][j]=new float [6];
for(int k=0;k<6;k++);
p[i][j][k]=0;
delete[] p[i][j];
}
delete[] p[i];
}
delete[] p;
Top
回复人:lyclowlevel() () 信誉:1002005-07-28 16:53:00得分:0
直接delete []p;就可以了。以下是我做的一些测试:
#include
using namespace std;
void main()
{
int ***p;
p=new int**[4];
int i,j,k;
for(i=0;i<4;i++)
{
p[i]=new int *[5];
for(j=0;j<5;j++)
{
p[i][j]=new int[6];
for(k=0;k<6;k++)
p[i][j][k]=0;
}
}
for(i=0;i<4;i++)
{
for(int j=0;j<5;j++)
{
for(int k=0;k<6;k++)
cout<cout<
Top
回复人:lyclowlevel() () 信誉:1002005-07-28 16:58:00得分:0
我的说法是错的,sorry。
qweryuiop(dxh) ( )才是对的。你动态申请了多少次,就要delete多少次。
Top
回复人:azuresn(司空摘星) () 信誉:1002005-07-30 01:24:00得分:0
new了几次,就delete几次。基本是这样。
_xyz