有哪位高手能告诉小弟我什么叫做new 和delete吗
有谁能告诉我什么叫做new 和delete吗
我看了这个new和delete,可就是不懂,为什么我用了delete,他还是35呢
#include <stdio.h>
void main()
{
int *a=new int;
int b;
a=&b;
*a=35;
printf( "在delete之前的*a:%d ",*a);
delete a;
printf( "\n在delete之后的*a:%d ",*a);
}
------解决方案--------------------
你这完全是瞎搞。。。呵呵
#include <stdio.h>
void main()
{
int *a = new int;
int b;
delete a //加这一句,不然会有
a = &b; //将指针指向另一个对象而
//没有释放以前的内存造成内存泄漏
*a = 35; //通过指针改变局部变量b的值使b为35
printf( "在delete之前的*a:%d ",*a);
delete a;//这是a指向的是静态分配的b的地址,
//根本不需要释放空间
printf( "\n在delete之后的*a:%d ",*a);
//即使是动态分配的空间,你释放之后
//指针还是指向原来的地方,只要在这段空间没被占用前
//你继续用指针访问,它的值表面上也是不会变得, 不过
//这很容易导致未定义的行为。。。。
}
------解决方案--------------------
int *a = new int;
*a=100;
delete a ;
printf( "%x,%d ",a,*a); //打印a 的地址和值
a = new int;
printf( "%x,%d ",a,*a);
*a=50;
printf( "%x,%d ",a,*a);
delete a ;
printf( "%x,%d ",a,*a);
//////////////////
这样你应该可以看出问题
我看了这个new和delete,可就是不懂,为什么我用了delete,他还是35呢
#include <stdio.h>
void main()
{
int *a=new int;
int b;
a=&b;
*a=35;
printf( "在delete之前的*a:%d ",*a);
delete a;
printf( "\n在delete之后的*a:%d ",*a);
}
------解决方案--------------------
你这完全是瞎搞。。。呵呵
#include <stdio.h>
void main()
{
int *a = new int;
int b;
delete a //加这一句,不然会有
a = &b; //将指针指向另一个对象而
//没有释放以前的内存造成内存泄漏
*a = 35; //通过指针改变局部变量b的值使b为35
printf( "在delete之前的*a:%d ",*a);
delete a;//这是a指向的是静态分配的b的地址,
//根本不需要释放空间
printf( "\n在delete之后的*a:%d ",*a);
//即使是动态分配的空间,你释放之后
//指针还是指向原来的地方,只要在这段空间没被占用前
//你继续用指针访问,它的值表面上也是不会变得, 不过
//这很容易导致未定义的行为。。。。
}
------解决方案--------------------
int *a = new int;
*a=100;
delete a ;
printf( "%x,%d ",a,*a); //打印a 的地址和值
a = new int;
printf( "%x,%d ",a,*a);
*a=50;
printf( "%x,%d ",a,*a);
delete a ;
printf( "%x,%d ",a,*a);
//////////////////
这样你应该可以看出问题