佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 1328|回复: 0

Vector + Structure + Pointer 的 問題

[复制链接]
发表于 12-11-2011 05:56 PM | 显示全部楼层 |阅读模式
我現在學著Binary Tree, 所以就做一個簡單的來玩玩, 不過遇到一個問題 >.<
我的code是這樣子的:

  1. #include "stdafx.h"
  2. #include <vector>

  3. using namespace std;


  4. struct Node
  5. {
  6.         string data;
  7.         Node *left;
  8.         Node *right;
  9.         float min;
  10. };

  11. int main ()
  12. {
  13.         vector<Node> Region;
  14.         Node *Struct;
  15.         Node *Buffer;
  16.         Node temp;
  17.         Struct = new Node;
  18.         Buffer = new Node;
  19.         Struct->data = "Region 1";
  20.         Struct->left = NULL;
  21.         Struct->right = NULL;
  22.         Struct->min = 1;
  23.         Region.push_back(*Struct);

  24.         Struct->data = "Region 2";
  25.         Struct->left = NULL;
  26.         Struct->right = NULL;
  27.         Struct->min = 2;
  28.         Region.push_back(*Struct);

  29.         Struct->data = "Region 3";
  30.         Struct->left = NULL;
  31.         Struct->right = NULL;
  32.         Struct->min = 3;
  33.         Region.push_back(*Struct);

  34.         Struct->data = "Region 4";
  35.         Struct->left = NULL;
  36.         Struct->right = NULL;
  37.         Struct->min = 4;
  38.         Region.push_back(*Struct);

  39.         Struct->data = "Region 5";
  40.         Struct->left = NULL;
  41.         Struct->right = NULL;
  42.         Struct->min = 5;
  43.         Region.push_back(*Struct);

  44.         Struct->data = "Region 6";
  45.         Struct->left = NULL;
  46.         Struct->right = NULL;
  47.         Struct->min = 6;
  48.         Region.push_back(*Struct);

  49.         for (int i = 0; i<Region.size(); i++)
  50.         {
  51.                 Buffer = &Region[i];
  52.                 cout<<Buffer->data<<endl;
  53.         }

  54. // Let say Region 1 and Region 2 are merged

  55.         Struct->data = "Region 1 + 2";
  56.         Struct->left = &Region[0];
  57.         Struct->right = &Region[1];
  58.         Struct->min = ((Region[0].min) + (Region[1].min))/2;
  59. [Breakpoint]Region.push_back(*Struct);

  60.         temp = Region[6];
  61.         cout<<endl<<temp.data<<"Consists of: "<<endl;
  62.         Buffer = temp.left;
  63.         cout<<Buffer->data;

  64.   return 0;
  65. }
复制代码



我做了一個struct來裝binary tree的東西, 裏面有兩個pointer, 會指去左右兩邊的struct。全部這些struct我最後會放在vector裏面。
我要Region[6] 裏面的struct, 裏面的left 指去Region[0], right 指去Region[1], 所以我用了


Struct->data = "Region 1 + 2";
Struct->left = &Region[0];
Struct->right = &Region[1];
Struct->min = ((Region[0].min) + (Region[1].min))/2;
Region.push_back(*Struct);

不過我發現這樣子push_back的話, Region[6] left pointer 和 right pointer裏面的Data 會變成bad ptr.

不講這麽多, 上圖:
Breakpoint前 (push_back_之前)



Breakpoint 后 (push_back之後)



難道vector的 push_back 只能用在一個layer?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT


本周最热论坛帖子本周最热论坛帖子

ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 9-11-2025 04:14 PM , Processed in 0.130635 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表