那谁的技术博客

感兴趣领域:高性能服务器编程,存储,算法,Linux内核
随笔 - 210, 文章 - 0, 评论 - 1183, 引用 - 0
数据加载中……

(C++)一个愚蠢的错误

#include <string.h>
#include 
<string>
using namespace std;

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

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

    
return 0;
}

立此为据,长点记性.


posted on 2008-06-06 21:30 那谁 阅读(4776) 评论(23)  编辑 收藏 引用 所属分类: C\C++

评论

# re: (C++)一个愚蠢的错误  回复  更多评论   

#include <string.h>
#include <string>
很有才
2008-06-06 21:44 | 罗宾李

# re: (C++)一个愚蠢的错误[未登录]  回复  更多评论   

晕倒
chinaunix上的是你哦,我是voipexplore。string内存布局不透明,只能用new类,不能用malloc类。
另楼上 包含string.h 是为了用memset
2008-06-06 22:00 | CppExplore

# re: (C++)一个愚蠢的错误  回复  更多评论   

@罗宾李
string.h是C中的函数,使用memset的头文件,string就不必说了吧?我还不至于犯string和string.h不分的错误.
2008-06-06 22:17 |

# re: (C++)一个愚蠢的错误  回复  更多评论   

@CppExplore

以后注意兄弟的ID了:)
2008-06-06 22:22 |

# re: (C++)一个愚蠢的错误  回复  更多评论   

C++里的结构就是类,不可以memset哦
2008-06-07 00:56 |

# re: (C++)一个愚蠢的错误  回复  更多评论   

错误就是 memset( ...string ) ?

有点巧,我同事也犯过这个错。:D
2008-06-07 09:27 | Kevin Lynx

# re: (C++)一个愚蠢的错误[未登录]  回复  更多评论   

长知识了。
2008-06-07 13:25 | ron

# re: (C++)一个愚蠢的错误  回复  更多评论   

能否请楼主详细解说一下错误?
2008-06-07 15:01 | kam

# re: (C++)一个愚蠢的错误  回复  更多评论   

可以正常执行啊!可以解释一下么?谢谢!!
2008-06-07 20:24 | 林茂

# re: (C++)一个愚蠢的错误[未登录]  回复  更多评论   

楼上的,C++里结构就是类,而不是原生的C结构。用memset会把类里的一些必要数据也清零。比如如果类有虚函数,则就有虚表指针,你用memset会把虚函数表指针置为0,这样你的类还有多态吗,你的程序还是健壮的吗
2008-06-07 22:51 | christanxw

# re: (C++)一个愚蠢的错误  回复  更多评论   

#include <cstring>
#include <string>
2008-06-09 18:05 | Wang Feng

# re: (C++)一个愚蠢的错误  回复  更多评论   

@christanxw
thanks for explanation
2008-06-09 18:22 | 林茂

# re: (C++)一个愚蠢的错误  回复  更多评论   

OK, mark 下
2008-06-10 10:21 | 零宇

# re: (C++)一个愚蠢的错误[未登录]  回复  更多评论   

......我也这么做过。。。。
2008-06-12 19:28 | 杨粼波

# re: (C++)一个愚蠢的错误[未登录]  回复  更多评论   

@创
“C++对我而言就是有STL带class能处理多态,继承的C. ”
最初的C++大体是这样,除了STL。
然而,现在还这么想的话,犯下这个错误是必然——C++的对象模型远不止C那么简单,背后有很多事情需要注意的。甚至,有时候构造函数是否为inline就决定了代码是否为二进制兼容。
2008-06-15 19:53 | raof01

# re: (C++)一个愚蠢的错误  回复  更多评论   

看完后,吓出一身汗,对内存对象模型的理解实在不够深入。
2008-06-15 23:30 | alexandercer

# re: (C++)一个愚蠢的错误  回复  更多评论   

不能把一个string型的对象memset了。俺对CString对象做过相同的操作,结果,自然所崩溃了。
2008-06-19 16:30 | abettor

# re: (C++)一个愚蠢的错误  回复  更多评论   

我只学过C++ 没用过这样的用法,有构造函数为什么还要如此呢
2008-07-02 20:13 | foxtail

# re: (C++)一个愚蠢的错误  回复  更多评论   

这种错误,我一般不会犯。
因为结构体里我绝对不会放类对象,我只会放基本类型数据,
如果有类对象,我一定会放在类里,如果是用到类,一定会把memset要不放在构造函数里,要不就放在成员函数里
2008-10-13 15:53 | x

# re: (C++)一个愚蠢的错误  回复  更多评论   

学习了。
2009-09-24 19:41 | kiven

# re: (C++)一个愚蠢的错误  回复  更多评论   

额..struct里头的string不能按字节memset吧。。。
2010-01-26 00:10 | qiuxiafei

# re: (C++)一个愚蠢的错误  回复  更多评论   

不错,学习了
2010-02-10 18:51 | wantukang

# re: (C++)一个愚蠢的错误  回复  更多评论   

不过是个惯性问题
2010-09-01 09:30 | lcm

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理