首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

New 指针有关问题,基础不太好。

2012-06-13 
New 指针问题,基础不太好。。我这样定义了一个结构体用来传递指针:C/C++ codestruct NodeParam{CListCtrl* p

New 指针问题,基础不太好。。
我这样定义了一个结构体用来传递指针:

C/C++ code
struct NodeParam{    CListCtrl* pList;    CStrig str;};

用这个动态数组进行管理
C/C++ code
CArry <NodeParam*, NodeParam*> m_Node;

我动态创建一个CListCtrl:
C/C++ code
CListCtrl* list = New CListCtrl;

想要将该指针放入动态数组m_Node中进行管理,于是:
C/C++ code
NodeParam *pNode;pNode->pList = list;pNode->str = _T("");m_Node.Add(pNode);

出现了问题, 指针没有初始化。。
于是我:
C/C++ code
NodeParam *pNode = new NodeParam;

然后再复制就没有问题了。
我想知道,new NodeParam的这个空间是什么空间, New CListCtrl不是已经为控件分配指针了吗?
new NodeParam 是结构体的空间吧?
那最后资源释放的时候需要两个空间都释放吗?
m_Node.RemoveAll(); 这样不行吧?

需要:
C/C++ code
for(){     NodeParam* pNode = m_Node.getat(i);     CListCtrl* p = pNode->pList;     delete p;     delete pNode;}

这样?

[解决办法]
NodeParam *pNode;只定义了变量并未分配空间,所以NodeParam *pNode = new NodeParam;是必须的。最后释放资源时2个空间都要释放,后面的代码是对的。

[解决办法]
需要分别释放

NodeParam结构有2个成员,一个指针,一个对象,在new NodeParam时,不会自动为指针成员分配内存

[解决办法]
是这样的。
第一个问题:new NodeParam是在动态区分配的空间,NodeParam *pNode;语句只是声明了一个指针,而指针没有指向任何位置,所以肯定要new 。在动态区分配的空间里才有 CListCtrl*和 CStrig 。
第二个问题:同上。
第三个问题:的确是都要释放。
第四个问题:要看你RemoveAll函数如何写了。
第五个问题:这样写可以。
赠送:_T("")可以在工程属性设置中设置为多字符集之后,就可以直接用""了。

最后:一定要给我分。
[解决办法]
为了更直观,可以给NodeParam添加2个构造函数:
C/C++ code
NodeParam::NodeParam() : pList(NULL), str(_T("")){}NodeParam::NodeParam(CListCtrl *p, CString s) : str(s){  pList = p;}
[解决办法]
楼上几位说的对

你可以用CPtrArray
[解决办法]
像int,double这种数据,是从栈上分配的,new个指针,是从堆上分配
[解决办法]
可以赋值啊。
NodeParam obj;
NodeParam *pNode = &obj;
[解决办法]
是这样的:NodeParam *pNode;
pNode->pList = list;
错误并不是说pNode不可以直接赋值。pNode->pList = list语句的意思是:把pNode所指向的NodeParam 的空间里的pList赋值。但是现在pNode指向的东西却还不存在。所以更加无法赋值了。
你明白了吗?

热点排行