有关string的问题,大家看看,谢谢
#include <iostream>using namespace std;
#include <string>
using namespace std;
struct Data
{
string str;
};
struct Node
{
Data data;
Node * NextNode;
};
bool Init_Node(Node * & e)
{
e=(Node *)malloc (sizeof( Node));
if (e==NULL)
return false;
else
return true;
};
void main()
{
Node E;
cin>>E.data.str;
cout<<E.data.str;
//这里可以///////////////////////
Node * e;
e=NULL;
if(Init_Node( e))
{
cout<<e;
cin>>e->data.str; //这里为什么会崩溃
cout<<e->data.str;
}
}
不要动态分配
就用 Node * e;
cin>>e->data.str;
就会崩溃 本帖最后由 ryxcaixia 于 2015-6-9 13:36 编辑
struct Data
{
string str;
};
struct Node
{
Data data;
Node * NextNode;
};
bool Init_Node(Node * & e)
{
//e=(Node *)malloc (sizeof( Node));
e = new Node;
if (e==NULL)
return false;
else
return true;
};
void main()
{
Node * e;
e=NULL;
if(Init_Node( e))
{
cout<<e;
cin>>e->data.str;
cout<<e->data.str;
}
}
主要原因是并没有对string类型进行初始化就直接使用
楼主不要着急说不是已经malloc了么, 往下看
1. string是一个类, 并不是基础类型, 他有自己的构造函数和析构函数, 静态定义变量就不说了, 动态变量为什么不成功?因为他的构造函数没有执行起来
2. malloc和new的区别
具体可以看看林锐的高质量c和c++编程有一章节专讲这个, 这里我简单说说(其实他书上说的也就是我说的这些)
如果除了malloc返回一个void*, 和new会自动只能返回申请类型外
最大的一个区别是
malloc仅仅申请sizeof()大小的内存块, 然后就什么都不管了
new则会依次执行结构体(类)内的每一个成员的构造函数, 换句话说, 如果都是内置类型的变量, 那么malloc和new没啥太大差别
但是包含了非基础类型, 那么申请内存就要用new, 因为malloc不会帮你执行构造函数但是new会
举个例子
struct student
{
string Name;
string Number;
string Age;
string Class;
string EnjoyGame
string GirlFriend;
string GirlFriendName;
string GirlFriendNumber;
string GirlFriendAge;
string GirlFriendClass;
string GirlFriendEnjoyGame
};
一个结构体, 里面包含十个string类型
malloc一下仅仅会得到一个内存大小为360字节的内存堆(一个string站36个字节), 然后malloc就撒手不管了
new一下, 先是得到了360字节的内存块, 然后会依次执行十次string类的构造函数
同理, 释放的时候不能用free, free一下是把这个指针指向的内存干掉了, 但是里面的很多东西并没有清理干净
此时要用delete释放, 一次delete, 则会依次执行10次string类的析构函数
ps: 楼主又是你哈! 我又来骗鱼币了 ryxcaixia 发表于 2015-6-9 13:29
struct Data
{
string str;
高,实在是高;哈哈;我慢慢深入;
你还记得我;哈哈
我也是说怎么又是你;
只有你回复:handshake ryxcaixia 发表于 2015-6-9 13:03
struct Data
{
string str;
想要鱼币,我多的是,以后慢慢给你,哈:lol: :lol:C/C++ 语法复杂 博大精深 一起努力 ryxcaixia 发表于 2015-6-9 13:53
C/C++ 语法复杂 博大精深 一起努力
我加你好友了,接受一下呗:big Miracle-s 发表于 2015-6-9 16:31
我加你好友了,接受一下呗
我也想啊 但是! 说权限不够 努力签到中 要到下一级别才可以 ryxcaixia 发表于 2015-6-9 16:43
我也想啊 但是! 说权限不够 努力签到中 要到下一级别才可以
努力吧,我是个bug,:lol:
页:
[1]