VS2012编译显示内存错误可是找不出...求大神

图片说明
#include
#include
#include

#include
#include

#include "food.h"
#include "io_lib.h"
#include "menu.h"

using namespace std;

// 点餐菜单
PurchaseMenu g_purchase_menu;

// 管理员账户
Administrator g_administrator("temp");

char **data = NULL;

void Init()
{
data = IoTool::Read("data.txt");
int data_pos = 0;

vector<Single> single_list;
vector<Many> many_list;

while (data[data_pos] != NULL) {
    char *line = data[data_pos++];

    string str_line(line);

    istringstream strin(str_line);

    string type;
    strin >> type;

    if (type == "single") {
        string name;
        int price;
        strin >> name >> price;

        single_list.push_back(Single(name, price));
    } 

    if (type == "many") {
        string name;
        int price;
        strin >> name >> price;

        string tmp_name;
        int tmp_price;
        vector<Single> many_single_list;
        while (strin >> tmp_name >> tmp_price) {
            many_single_list.push_back(Single(tmp_name, tmp_price));
        }

        many_list.push_back(Many(name, price, many_single_list));
    } 

    if (type == "password") {
        string password;
        strin >> password;
        g_administrator = Administrator(password);
    }
}

g_purchase_menu.set_single_list(single_list);
g_purchase_menu.set_many_list(many_list);

}

void MyExit()
{
// 修改
string new_pass("password ");
new_pass = new_pass + g_administrator.password() + string("\n");
strcpy(data[0], new_pass.c_str());

int data_pos = 0;
string out_data;

while (data[data_pos] != NULL) {
    char *line = data[data_pos++];

    out_data += string(line);
}

IoTool::Write("data.txt", out_data.c_str(), true);

// 写入订单信息
string out_order;
vector<Order> order_list_ = g_administrator.order_list();
for (auto tmp_order : order_list_) {
    out_order = out_order + tmp_order.name() + string(" ");

    for (auto tmp_single : tmp_order.single_list()) {
        out_order = out_order + tmp_single.name() + string(" ");
    }

    for (auto tmp_many : tmp_order.many_list()) {
        out_order = out_order + tmp_many.name() + string(" ");
    }

    out_order = out_order + string("\n");
}

IoTool::Write("order.txt", out_order.c_str(), false);

}

int main(int argc, char *argv[])
{

Init();
cout << "初始化完成" << endl;
while (1) {
cout << endl;
system("pause");
system("cls");
cout << "1.顾客点餐" << endl
<< "2.管理员操作" << endl
<< "请输入选择:";

    int choice = 0;
    cin >> choice;

    switch (choice) {

Change: case 1: {
g_purchase_menu.RunPurchase();

            PayMenu p(g_purchase_menu);
            char pay_result = p.RunPay();
            if (pay_result == 'Y') {

                time_t t = time(0);
                char tmp[64];
                strftime(tmp, sizeof(tmp), "%Y-%m-%d-%H-%M-%S", localtime(&t)); 

                Order o(p.sum_price(), string(tmp), p.single_list(), p.many_list());
                o.ShowOrder();
                g_administrator.push_order(o);
            } 
            else if (pay_result == 'N') {
                goto Change;
            } 
            else {
                break;
            }

            break;
        }

        case 2: {
            cout << "请输入登录密码:";
            string password;
            cin >> password;
            if (g_administrator.is_Pass(password)) {
                g_administrator.Run(); 
            }
            else {
                cout << "密码错误" << endl;
            }
            break;
        }
    }
}

return 0;

}
#ifndef FOOD_H
#define FOOD_H

#include
#include
#include

using std::cout;
using std::endl;
using std::string;
using std::vector;

// 基类,定义了食物的基本属性,包括名字价格,并定义了这些属性的存取操作
class Basic
{
public:
Basic() {}
Basic(string name, int price) : name_(name), price_(price) {}

// 输出,信息 
void Show() {
    cout << "名称:" << name_ << ",价格:" << price_ << endl; 
}

string name() { return name_; }
int price() { return price_; }
void set_name(string name) { name_ = name; }
void set_price(int price) { price_ = price; }

private:
string name_;
int price_;
};

// 单品类,完全继承自基类
class Single : public Basic
{
public:
Single() {}
Single(string name, int price) : Basic(name, price) {}
};

// 套餐,继承自基类,并且多了套餐中各种食物的详细情况
class Many : public Basic
{
public:
Many() {}
Many(string name, int price, const vector &list) : Basic(name, price), list_(list) {}

// 输出,列表
void ShowList() {
    cout << "    具体信息如下:" << endl;
    for (int i=0; i<list_.size(); i++) {
        cout << "      "; 
        list_[i].Show();
    } 
}
vector<Single> list() { return list_; }
void set_list(const vector<Single> &list) { list_ = list; }

private:
vector list_;
};

#endif

直接点中断按钮,打开编译器会停止在出错的代码位置,查看调用堆栈等,应该是非法指针

如果你是要做网页,建议重新搜个资源,你这个是控制台程序,并没有界面。(ASP.NET的源码)
如果你是做客户端,请找MFC的资源。

这个错绝对是指针的问题,你可以先初始化一下指针,还不行的话就一点点屏蔽用到指针的代码,看是哪一句断的