免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: converse
打印 上一主题 下一主题

[C++] 今天犯的一个愚蠢的错误 [复制链接]

论坛徽章:
0
51 [报告]
发表于 2008-06-05 17:51 |只看该作者
不能用memset去初始化一个带了对象的结构. 这样会破坏对象的内存结构

论坛徽章:
0
52 [报告]
发表于 2008-06-06 08:51 |只看该作者
这个例子里面没有错误,很可能是虚惊一场。

我看了C++,我差点疯了,我认为string name在生成实例tTest的时候没有被分配内存,分配内存的时候,C++可以重载=然后malloc,也就是说,name的地址正好是tTest的地址。

如果生成一个不带有参数的对象的构造函数分配了内存,只要内存的地址没有变化,也不会有问题。

这里的秘密就是name正好是tTest的第一个对象,name的地址就是tTest的地址。

论坛徽章:
0
53 [报告]
发表于 2008-06-06 09:27 |只看该作者
另外我想了析构函数,就是前面有个~的函数,析构又怎么样,析构来析构去还是要返回对象的地址,就是把对象的空间释放,但是对象却是在main函数返回的时候,靠出栈来收回。

论坛徽章:
0
54 [报告]
发表于 2008-06-06 11:43 |只看该作者
原帖由 converse 于 2008-6-3 16:08 发表
测试代码如下:


#include
#include
using namespace std;

typedef struct Test
{
    string name;
    int    a;
}SoftwareInfo;

int main()
{
    Test tTest;
    memset(&tTest, 0, s ...


    Test tTest;
Test是一种数据类型么?

论坛徽章:
0
55 [报告]
发表于 2008-06-06 15:16 |只看该作者
原帖由 勿丑于 于 2008-6-6 08:51 发表
这个例子里面没有错误,很可能是虚惊一场。

我看了C++,我差点疯了,我认为string name在生成实例tTest的时候没有被分配内存,分配内存的时候,C++可以重载=然后malloc,也就是说,name的地址正好是tTest的地 ...


没人回答好没劲哪,我又想了想C++,看来对于像我这样的准黑客一级的人,C++很容易crack呀。C++出现的时候有人准保在偷着笑呢,hohohoho~~~~~~~~

论坛徽章:
0
56 [报告]
发表于 2008-06-06 18:39 |只看该作者
呵呵,楼主的错误在于用memset吧C++编译器可能放在string对象里面的任何东西就歼灭为zero了

论坛徽章:
0
57 [报告]
发表于 2008-06-06 21:11 |只看该作者
>> 结构体里有类作为成员的时候,不要用memset,这是CPP常识吧
>> 不能用memset去初始化一个带了对象的结构. 这样会破坏对象的内存结构

类成员或者类对象并不可怕,只要它是一个 POD 的类,都可以用 memset() 来对对象清零。

>> c, c++混用的后果

明明是一个 C++ 程序,何来混用之说?

>> 这个例子里面没有错误,很可能是虚惊一场。

诚然,程序运行正确不能证明程序中不存在错误。但是象搂主的程序,在前面有的帖子中已经贴出了程序运行错误的情况。只要有一个运行错误已经可以说明程序中存在问题了,绝对不会是“虚惊一场”。

论坛徽章:
0
58 [报告]
发表于 2008-06-06 22:33 |只看该作者
学习

论坛徽章:
0
59 [报告]
发表于 2008-06-07 14:14 |只看该作者
原帖由 whyglinux 于 2008-6-6 21:11 发表
>> >> 这个例子里面没有错误,很可能是虚惊一场。

诚然,程序运行正确不能证明程序中不存在错误。但是象搂主的程序,在前面有的帖子中已经贴出了程序运行错误的情况。只要有一个运行错误已经可以说明程序中存在问题了,绝对不会是“虚惊一场”。


是的, 我看到了, 尽管看不懂, 但我也细想了一下例外的情况, 你说的很有道理.

论坛徽章:
0
60 [报告]
发表于 2008-06-07 17:49 |只看该作者
所以C++的magic太多了。不要用它,用C+动态语言
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP