C++ run error: pointer being freed was not allocated

Posted by Dale Reves on Stack Overflow See other posts from Stack Overflow or by Dale Reves
Published on 2012-09-23T09:06:25Z Indexed on 2012/09/23 9:37 UTC
Read the original article Hit count: 243

Filed under:

I'm learning c++ and am working on a program that keeps giving me a 'pointer being freed was not allocated' error. It's a grocery store program that inputs data from a txt file, then user can enter item# & qty. I've read through similar questions but what's throwing me off is the 'pointer' issue. I would appreciate if someone could take a look and help me out. I'm using Netbeans IDE 7.2 on a Mac. I'll just post the whole piece I have so far. Thx.

#include <iostream>
#include <fstream>
#include <string>
#include <vector>

using namespace std;


class Product
{
  public:
      // PLU Code
  int getiPluCode()
  {
    return iPluCode;
  }

  void setiPluCode( int iTempPluCode)
  {
    iPluCode = iTempPluCode;
  }

  // Description
  string getsDescription()
  {
    return sDescription;
  }

  void setsDescription( string sTempDescription)
  {
    sDescription = sTempDescription;
  }

  // Price
  double getdPrice()
  {
    return dPrice;
  }

  void setdPrice( double dTempPrice)
  {
    dPrice = dTempPrice;
  }

  // Type..weight or unit
  int getiType()
  {
    return iType;
  }

  void setiType( int iTempType)
  {
    iType = iTempType;
  }

  // Inventory quantity
  double getdInventory()
  {
    return dInventory;
  }

  void setdInventory( double dTempInventory)
  {
    dInventory = dTempInventory;
  }




    private: 
      int iPluCode;
      string sDescription;
      double dPrice;
      int iType;
      double dInventory;
};


int main ()
{

  Product paInventory[21]; // Create inventory array
  Product paPurchase[21]; // Create customer purchase array

    // Constructor to open inventory input file
    ifstream InputInventory ("inventory.txt", ios::in);
        //If ifstream could not open the file
    if (!InputInventory)
    {
        cerr << "File could not be opened" << endl;
        exit (1);
    }//end if

    int x = 0;

    while (!InputInventory.eof () )
    {
      int iTempPluCode;
      string sTempDescription;
      double dTempPrice;
      int iTempType;
      double dTempInventory;

        InputInventory >> iTempPluCode >> sTempDescription >> dTempPrice >> iTempType >> dTempInventory;

        paInventory[x].setiPluCode(iTempPluCode);
        paInventory[x].setsDescription(sTempDescription);
        paInventory[x].setdPrice(dTempPrice);
        paInventory[x].setiType(iTempType);
        paInventory[x].setdInventory(dTempInventory);

        x++;

    }

    bool bQuit = false;
    //CREATE MY TOTAL VARIABLE HERE!

    int iUserItemCount;
    do
    {
      int iUserPLUCode;
        double dUserAmount;
        double dAmountAvailable;
        int iProductIndex = -1;
        //CREATE MY SUBTOTAL VARIABLE HERE!

        while(iProductIndex == -1)
        {
            cout<<"Please enter the PLU Code of the product."<< endl;

            cin>>iUserPLUCode;

            for(int i = 0; i < 21; i++)
            {
            if(iUserPLUCode == paInventory[i].getiPluCode())
            {
                dAmountAvailable = paInventory[i].getdInventory();
                iProductIndex = i;  
            }
            }

                        //PLU code entry validation
            if(iProductIndex == -1)
            {
              cout << "You have entered an invalid PLU Code.";
            }
        }



        cout<<"Enter the quantity to buy.\n"<< "There are  "<< dAmountAvailable << "available.\n";
        cin>> dUserAmount;

        while(dUserAmount > dAmountAvailable)
        {
         cout<<"That's too many, please try again";
         cin>>dUserAmount;
        }

        paPurchase[iUserItemCount].setiPluCode(iUserPLUCode);// Array of objects function calls
        paPurchase[iUserItemCount].setdInventory(dUserAmount);
        paPurchase[iUserItemCount].setdPrice(paInventory[iProductIndex].getdPrice());       
        paInventory[iProductIndex].setdInventory( paInventory[iProductIndex].getdInventory() - dUserAmount );       

            iUserItemCount++;

        cout <<"Are you done purchasing items? Enter 1 for yes and 0 for no.\n";
        cin >> bQuit;

    //NOTE: Put Amount * quantity for subtotal
    //NOTE: Put code to update subtotal (total += subtotal)

    // NOTE: Need to create the output txt file!

    }while(!bQuit);




  return 0;

} 

© Stack Overflow or respective owner

Related posts about c++