免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3625 | 回复: 7
打印 上一主题 下一主题

[C++] 内存地址冲突 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-09-06 08:18 |只看该作者 |倒序浏览
我写了下面的简单代码,在函数中new一个对象:

class A
{
public:
        A(int a){m_a = a;};
        int getA(){return m_a;};
private:
                int m_a;
};

void test(A** t)
{
        *t = new A(1);
}

int main()
{
        //BiThrNode** biTree= NULL;
        //createBiTree(biTree);
        A** a = NULL;
        test(a);
        cout<<(*a)->getA()<<endl;
}


但是总是在          *t = new A(1);    报地址冲突的错误,真的看不出什么问题,请教各位大侠?

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
2 [报告]
发表于 2013-09-06 08:38 |只看该作者
        A* a = NULL;
        test(&a);
        cout<<(a)->getA()<<endl;

论坛徽章:
0
3 [报告]
发表于 2013-09-06 09:28 |只看该作者
本帖最后由 nizainade 于 2013-09-06 09:36 编辑

回复 2# hellioncu


   之前看错了你的回复,不好意思,这样可以了,请问下面有什么区别??



A** a = NULL;
        test(a);
        cout<<(*a)->getA()<<endl;

A* a = NULL;
        test(&a);
        cout<<a->getA()<<endl;

论坛徽章:
59
2015年亚洲杯之约旦
日期:2015-01-27 21:27:392015年亚洲杯之日本
日期:2015-02-06 22:09:41拜羊年徽章
日期:2015-03-03 16:15:432015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015元宵节徽章
日期:2015-03-06 15:50:392015年亚洲杯之阿联酋
日期:2015-03-19 17:39:302015年亚洲杯之中国
日期:2015-03-23 18:52:23巳蛇
日期:2014-12-14 22:44:03双子座
日期:2014-12-10 21:39:16处女座
日期:2014-12-02 08:03:17天蝎座
日期:2014-07-21 19:08:47
4 [报告]
发表于 2013-09-06 10:16 |只看该作者
区别是这个:

int main()
{
         //BiThrNode** biTree= NULL;
         //createBiTree(biTree);
         A *pPointerItself;
         //A** a = NULL;
         A** a =&pPointerItself
         test(a);
         cout<<(*a)->getA()<<endl;
}

论坛徽章:
6
技术图书徽章
日期:2013-11-13 11:11:27子鼠
日期:2014-02-20 17:54:13处女座
日期:2014-06-16 17:43:33午马
日期:2014-08-08 09:11:17未羊
日期:2014-08-10 11:57:072015年辞旧岁徽章
日期:2015-03-03 16:54:15
5 [报告]
发表于 2013-09-06 10:24 |只看该作者
  1. void test(A*& t)
  2. {
  3.     t = new A(1);
  4. }

  5. int main()
  6. {
  7.     A* a = NULL;
  8.     test(a);
  9.     cout << a->getA() << endl;
  10. }
复制代码

论坛徽章:
6
技术图书徽章
日期:2013-11-13 11:11:27子鼠
日期:2014-02-20 17:54:13处女座
日期:2014-06-16 17:43:33午马
日期:2014-08-08 09:11:17未羊
日期:2014-08-10 11:57:072015年辞旧岁徽章
日期:2015-03-03 16:54:15
6 [报告]
发表于 2013-09-06 10:33 |只看该作者
本帖最后由 littledick 于 2013-09-06 10:35 编辑

指针的指针作为传出参数,报出来的是运行期错误。
还不如用指针的引用,直接报编译错误。

论坛徽章:
0
7 [报告]
发表于 2013-09-06 11:39 |只看该作者
回复 4# folklore


    意思是在定义指针p的指针pp时候,需要先定义指针p进行初始化,然后再定义pp而且初始化???

    如果直接定义pp, pp是被初始化了,但是pp指向的p没有初始化???


   之前真没注意过这个问题。。。 一般在用指针的指针时候,应该是指向的对象(也是指针)都已经初始化了, 在这学习了,谢谢!!

论坛徽章:
0
8 [报告]
发表于 2013-09-06 11:41 |只看该作者
回复 6# littledick


    没太理解你说的报错误是指什么, 但是用指针的引用可以,而且更可读些
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP