菜鸟问题-指向结构体的指针不能自增吗?

d3_latefor 2011-12-03 12:28:37
struct StuNode
{string name;
float score;
};

class ScoreMngt
{private:
int len;
StuNode *student;
public:
ScoreMngt();
}
ScoreMngt::ScoreMngt()
{ len=10;
student=(StuNode*)malloc((len+1)*sizeof(StuNode));
if(!student)exit(-1);
student->name="赵本山";student->score=59.9;
student++;
}



有用的就这些,运行的student就跳出程序了,后面还有其他的




第一次发帖,还是菜鸟贴,有什么不规范的各路大大指教啊
...全文
384 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
d3_latefor 2011-12-03
  • 打赏
  • 举报
回复
明白
[Quote=引用 7 楼 vilnies 的回复:]

引用 6 楼 d3_latefor 的回复:

就是说自增是OK的,但是分配第二个string的时候,MALLOC没有调用string的构造函数所以出错,对不对?

student->name="赵本山";
错误在这里,name没经过构造.

不是说第二个string没构造,里面全部的东西都没经过构造。
malloc是一次性完成的,给你一张白纸般的内存。
[/Quote]
vilnies 2011-12-03
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 d3_latefor 的回复:]

就是说自增是OK的,但是分配第二个string的时候,MALLOC没有调用string的构造函数所以出错,对不对?
[/Quote]
student->name="赵本山";
错误在这里,name没经过构造.

不是说第二个string没构造,里面全部的东西都没经过构造。
malloc是一次性完成的,给你一张白纸般的内存。

d3_latefor 2011-12-03
  • 打赏
  • 举报
回复
就是说自增是OK的,但是分配第二个string的时候,MALLOC没有调用string的构造函数所以出错,对不对?
d3_latefor 2011-12-03
  • 打赏
  • 举报
回复
http://tech.ddvip.com/2009-05/1242201392118933.html
看完这个有点了解了,但是这句还是不太懂:
"malloc分配的是一块内存区域,就用指针访问好了,而且还可以在里面移动指针。"
yisikaipu 2011-12-03
  • 打赏
  • 举报
回复
自己对照两种情况理解

int main()
{
{
string *p=new string;
*p="test";
delete p;
}

{
string *p=(string*)malloc(sizeof(string));
new (p) string;
*p="test";
free(p);
}
return 0;
}
d3_latefor 2011-12-03
  • 打赏
  • 举报
回复
以为MSDN不会自动提醒...刷新了几次,,发现真的没人有空....
yisikaipu 2011-12-03
  • 打赏
  • 举报
回复
1,与指针自增没关系
2,你的程序逻辑且不谈。malloc不会自动调用构造函数,string无法初始化,赋值出错。应改为用new

struct StuNode
{
string name;
float score;
};

class ScoreMngt
{
private:
int len;
StuNode *student;
public:
ScoreMngt();
};

ScoreMngt::ScoreMngt()
{
len=10;

student=new StuNode[len+1];
//student=(StuNode*)malloc((len+1)*sizeof(StuNode));

if(!student)
exit(-1);

student->name="赵本山";
student->score=59.9;
student++;
}

int main()
{
ScoreMngt sm;

return 0;
}

64,662

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧