C/C++基础性问题(一)

1.关于变量的内存开辟问题

   http://topic.csdn.net/u/20070927/11/cfc316cb-2c6b-41eb-b318-473e8a328409.html 

 比如下面的例子:
int   i=5;   //这个变量i的空间应该是在栈上,不需要手动释放
int   *k   =   new   int(5)   //这个变量k的空间应该是在堆上开辟,   不用了的时候需要手动释放.

上面是我对定义一个整型变量的两种方式的理解,   不知道有没有错误?

但是关于struct/class   这种类型的内存开辟问题我还是很糊涂.
我知道关于链表之类的动态的结构,内存开辟是必须用new   /alloc等在堆上进行.但是普通的struct/class   呢?   比如说下面两种不同的方式

方式1:
struct   test
{   int   a;
int   b;
};
test   *testObj   =   new   test();
testObj-> a   =1;
testObj-> b   =2;

方式2:
struct   anotherTest
{   int   a;
int   b;
};
anotherTest   anotherTestObj;
anotherTestObj.a=1;
anotherTestObj.b=2;


问题:   1:   方式2这种定义方法有没有问题?是不是在栈上分配内存?   如果该struct/class很大,超出了栈的大小怎么办?  
2. 如果上面的方式2的写法没有问题, 如果struct/class中有动态指针(比如链表)的成员,是不是这样写就会有问题?
3.方式1和方式2的区别?

******************************************************************************************

int   *k   =   new   int(5);

指针变量   k   的空间在栈上,   在32位机器上指针变量大小4字节

指针变量k所存储的4字节地址所指向到空间在堆上,类型为   int   大小为   4   *   sizeof(int);

 

A:方式1在在栈上分配一个test型指针变量.只占用栈4个字节(如果是在32位机的情况下^_^).这个变量指向一个在堆中分配的test型结构体.所以在程序结束时如果不显式的delete   testObj.那么这个在栈中的指针变量虽然被自动删除.但为其在堆中分配的test结构并没有被销毁.内存于是泄漏...

方式2在栈上分配一个anothertest变量.这个变量占栈的大小为sizeof(anothertest)个字节.和堆没有关系.所以这个变量所占用的栈空间在程序结束时会被自动删除.

2.指针与数组的问题

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值