C++关于动态分配后的内存~~

来源:百度知道 编辑:UC知道 时间:2024/06/09 12:24:37
那动态分配了的空间函数函数结束后还存在的话,难道在另一个函数里可以跳跃式的调用?
不是这个意思,就是例如
int first()
{
int *i=new int;
return 0;
}
int second()
{
delete *i;
}
就是这样,这样虽然明显是错误的,可还是想问清楚

但又说不自己不释放的话,申请的空间就不会自动释放 那如果是这样,

int *o;
int first()
{
int *j=new int;
o=j;
return 0;
}
int second()
{
int *k=*o;
delete *k;
return 0;
}
通过地址转折在下一个函数继续访问这个没被释放的空间,最后通过转折过来的空间地址,对这个空间进行释放,是否可行?是否说明了那空间没被释放?

什么是跳跃式的调用?调用什么?如果动态分配的空间的指针被返还或者是全局变量的话另一个函数就可以通过这个指针来对这个空间进行操作。

你在开玩笑吧?如果i是一个函数个局部变量那另一个函数是无法调用它的。除非你把i变成全局变量这两个函数才有效。

第二种做法是可行的。如果你运行到那里程序没有弹出对话框说有run time error的话就说明先前空间没有被释放,因为对释放过的空间用delete的话就会出错。

谁分配谁释放,所以不应该在first函数之外使用这个地址空间,应该由first函数负责释放。另一种就是函数返回分配的地址,然后释放,但是这个不是很好。

你在first中申请了一块内存,不释放的话这块内存就永远留下来了.

如果你想释放一块内存,你必须知道内存的地址.

i做为内存的地址,是first函数的局部变量,在second中是看不到的,所以你这里是语法错误.

除非你用作用域大一点的变量来做内存地址.可以这样,把i变量提出来:

int *i;

int first()
{
i=new int;
return 0;
}
int second()
{
delete *i;
}

学了编译原理就知道了,小兄弟,哈哈。
局部变量在栈(Stack)中分配,编译器会自动来通过出栈和压栈来分配和释放变量。而使用new关键字进行动态分配,则会在堆(Heap)中创建内存区供变量使用。
你说的很对动态分配的内存不会自动释放,这就是大家一致头痛的内存泄漏的原因啊,多多努力吧。