1

Have a look at this code: I am trying to read in a number of strings from the console and store them in a dynamic array.

int Doctor::addPatients()
{
  string* names = NULL;
  int num;
  cout << "how many patients are to be added? ";
  cin >> num;
  numPatients=num;
  names = new string[numPatients];
  for(int i=0;i++;i<numPatients){
    cout << "enter the next patient's name: ";
    cin.clear();
    cin >> names[i];
  }
  patients = names; //patients is a private member variable of class Doctor
}

When I execute this code, I get the following error:

malloc: *** error for object 0x10c100898: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug
Abort trap: 6

Any help is greatly appreciated

Jefferson Hudson
  • 728
  • 1
  • 10
  • 22

3 Answers3

3

you do not initialize the integer i

ISTB
  • 1,799
  • 3
  • 22
  • 31
3
for(int i=0;i++;i<numPatients)  // Condition is the second expression in for syntax

Wrong syntax.

for(int i=0;i<numPatients; i++)

What compiler are you using ? You should get a compilation error than a run-time error. Also did you write a copy constructor ? For more info see Rule of Three. To ease the job, use std::vector<std::string>.

Community
  • 1
  • 1
Mahesh
  • 34,573
  • 20
  • 89
  • 115
  • Man I really messed up that for loop. Thank you. One of those things I didn't even think about looking at again (after fixing the first problem). I'm using g++ on Mac OSX, Xcode 4.4.1, no flags except for -g when debugging. – Jefferson Hudson Oct 03 '12 at 13:36
1

In the for statement, for(int i;i++;i<numPatients)

i should be initialised to 0 and condition should be the second parameter Correct format should be -

for(int i=0;i<numPatients;i++)

cin is not good method to get the string input. cin reads only till it sees space character (space,newline,tab..) Alternatively use getline function -

syntax:

getline(cin,names[i])
Mahesh
  • 34,573
  • 20
  • 89
  • 115
karpanai
  • 235
  • 4
  • 14