为了账号安全,请及时绑定邮箱和手机立即绑定

这里的链表程序哪里不妥?为什么会有访问地址冲突的现象?

这里的链表程序哪里不妥?为什么会有访问地址冲突的现象?

C++
我是北方栖姬 2018-09-19 12:58:30
typedef struct No {  string name;  struct No* next; }Node,  * pNode; pNode list(void) {  string val;  pNode HEAD = (pNode)malloc(sizeof(Node));  if (HEAD == nullptr) {   cout << "分配内存失败!" << endl;   exit(-1);  }  pNode end = HEAD;  end->next = nullptr;  int i;  cout << "请输入人数" << endl;  cin >> i;  cout << "请输入姓名" << endl;  for (int j = 0; j < i; j++) {    cin >> val;   pNode p_end = (pNode)malloc(sizeof(Node));   if (p_end == nullptr) {    cout << "分配内存失败!" << endl;    exit(-1);   }   p_end->name = val;   end->next = p_end;     //出错点:访问地址冲突   p_end->next = nullptr;   end = p_end;  }  return HEAD; }
查看完整描述

1 回答

已采纳
?
AAnonymous

TA贡献62条经验 获得超31个赞

个人觉得问题在于,不应当使用C风格的struct。

既然C++中struct是一个类,你就应当写成C++的类。使用new去创建对象。

malloc不会调用构造函数,只是分配那么大一块内存,而且C++里,string也是一个类,这样可能导致某些地方内存访问出问题。

查看完整回答
1 反对 回复 2018-09-19
  • 我是北方栖姬
    我是北方栖姬
    谢谢指教!我的struct是C风格的,换成C++风格并且把malloc换成new之后就没有问题了。
  • 我是北方栖姬
    我是北方栖姬
    我想最后问问,在构建struct时要怎么同时用两个名字代表它?我只会用一个名字代表新创的struct。比如说:struct A{};我只能命名成A,不会命名成A和*A,求大大指教!
  • AAnonymous
    AAnonymous
    不需要两个名字。那是typdef定义的别名。 类似于。 typedef int INT; typedef int * P_INT;
  • 1 回答
  • 0 关注
  • 941 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信