将指针传递给函数时C ++崩溃

时间:2015-02-04 00:34:24

标签: c++

我要做的是显示指向对象数组的指针。这是我的主程序,它崩溃的功能是listAll()。如果我只输入一个对象就可以了,但是当我输入第二个对象时它会崩溃。我不知道出了什么问题。选择menuOption 1两次然后尝试调用所有列表后出现问题。我看到数组大小没有增加..

#include <fstream> 
#include <iostream> 
#include <iomanip> 
#include <string>
using namespace std; 

#include "fileStuff.h"

bool menu();
bool menuOptions(int option);
void fileIO();
void listAll(interact * obs, int arryO);

int main() 
{ 

    bool isRunning = true;
    while (isRunning)
    {
        isRunning = menu();
    }
return 0; 
}

bool menu()
{
    int option = 0;
    cout << "1: add new backpack. " << endl
        << "2: delete a backpack "<< endl
        << "3: sort ascending by id " << endl
        << "4: sort descending by id " << endl
        << "5: list all backpacks " << endl
        << "6: quit" << endl;
    cin >> option;
    return menuOptions(option);
}

bool menuOptions(int option)
{

    static int arrayO = 0;
    static interact *obs = new interact[arrayO];
    fileStuff test;
    int tempBagId = 0, tempInvSpaces = 0, tempAmtOfItemsInInv = 0;
    double tempInvMaxWeight = 0.0;
    string tempBagType, tempBagCondish;
    int t = 0 ;
    int i = 0;
    switch (option)
    {
    case 1:
        cout << "bagId? ";
        cin >> tempBagId;
        cout << "How many inv spaces? ";
        cin >> tempInvSpaces;
        cout << "How much weight can the bag hold? ";
        cin >> tempInvMaxWeight;
        (obs + arrayO)->setBagId(tempBagId);
        (obs + arrayO)->setInvSpaces(tempInvSpaces);
        (obs + arrayO)->setInvMaxWeight(tempInvMaxWeight);
        cout << "all stored" << endl;
        arrayO++;
        break;
    case 2:
        //listmanager delete one

        //arrayO--;
        break;
    case 3:
        //sort ascending by id
        break;
    case 4:
        //sort descending by id
        break;
    case 5:
        //list all
        listAll(obs, arrayO);
        break;

    case 6:
        obs = NULL;
        delete obs;
        return false;
        break;
    default:
        break;
    }
}


void listAll(interact * obs, int arryO)
{
int i = 0;
cout << i << endl;
cout << arryO << endl;

}
下面是我班上的要点。

#include "listManager.h"
#include <iostream>
#include <string>
using namespace std;

interact::interact()
{
    bagId = 0;
    invSpaces = 0;
    invMaxWeigt = 0;

}

void interact::setBagId(int id)
{
    bagId = id;
}
void interact::setInvSpaces(int spaces)
{
    invSpaces = spaces;
}

void interact::setInvMaxWeight(double weight)
{
    invMaxWeigt = weight;
}

int interact::getBagId()
{
    return bagId;
}
int interact::getInvSpaces()
{
    return invSpaces;
}

double interact::getInvMaxWeight()
{
    return invMaxWeigt;
}

2 个答案:

答案 0 :(得分:3)

你有:

static int arrayO = 0;
static interact *obs = new interact[arrayO];

这将创建一个0长度的动态数组。正如Ben所说,指针永远不会改变。

崩溃可能是由于在增加索引(arrayO++;)之后尝试访问它,之后它只是访问超出边界内存。

答案 1 :(得分:2)

您的obs指向大小为零的数组:

static int arrayO = 0;
static interact *obs = new interact[arrayO];

并且从未改变为指向任何更大的东西。

因此,每次尝试下标都是数组溢出。