exc_bad_access error
<p>I'm writing a program for a homework assignment.  The program compiles and runs, but has a bad access error.  </p>

<p>This is main.cpp</p>

<pre><code>#include &lt;iostream&gt;
#include &lt;string&gt;
#include "Mammal.h"
#include "Dog.h"
#include "Horse.h"
#include "Pig.h"
#include "Cat.h"

using namespace std;
//Seed for ease of grading
const int SEED=100;
const int NUM_ANIMALS=5;
const int WEIGHT_LIMIT=150;


void MammalAssignment(const Mammal * new_Mammal, int choice, string newName);
void UserChoice(const Mammal * new_Mammal);
void ListAnimal(const Mammal *new_Mammal);


int main()
{
    string newName, newWeight;

    srand(SEED);
    Mammal *new_Mammal[NUM_ANIMALS];

    UserChoice(*new_Mammal);
    for(int i=0; i&lt;NUM_ANIMALS; i++)
        ListAnimal(new_Mammal[i]);



    //Program pauses for user input to continue
    char exit_char; 
    cout&lt;&lt;"\nPress any key and &lt;enter&gt; to exit\n";
    cin&gt;&gt;exit_char;

    return 0;
}

void UserChoice(const Mammal * new_Mammal)
{
    int choice;
    bool choiceGood;
    string newName;

    for(int i=0;i&lt;NUM_ANIMALS; i++){
        choiceGood=false;
        while(choiceGood==false)
        {   
            cout&lt;&lt;"-Please choose a number 1-4 for the corresponding animal-\n"
                &lt;&lt;"1-Dog\n2-Horse\n3-Pig\n4-Cat\n";

            cin&gt;&gt;choice;  //User choice

            if(choice&lt;=0 || choice &gt;=5){
                cout&lt;&lt;"Your choice is invalid\n\n";
                continue;
            }

            choiceGood=true;
        } //While loop
        cout&lt;&lt;"\nPlease enter a name for the animal you have chosen(Ex. Fido).\n";
        cin&gt;&gt;newName;

        MammalAssignment(&amp;new_Mammal[i], choice, newName);
    }  //For loop

}

void MammalAssignment(const Mammal * new_Mammal, int choice, string newName)
{
    if(choice==1){
        Dog newDog(rand()%(WEIGHT_LIMIT+1), newName);
        new_Mammal=&amp;newDog;
    }
    else if(choice==2){
        Horse newHorse(rand()%(WEIGHT_LIMIT+1), newName);
        new_Mammal=&amp;newHorse;
    }
    else if(choice==3){
        Pig newPig(rand()%(WEIGHT_LIMIT+1), newName);
        new_Mammal=&amp;newPig;
    }
    else if(choice==4){
        Cat newCat(rand()%(WEIGHT_LIMIT+1), newName);
        new_Mammal=&amp;newCat;
    }
}

void ListAnimal(const Mammal *new_Mammal)
{
    cout&lt;&lt;"-------------------------\nName:"
        &lt;&lt;new_Mammal-&gt;GetName()&lt;&lt;"\nWeight: "
        &lt;&lt;new_Mammal-&gt;GetWeight();
}
</code></pre>

<p>Mammal.h</p>

<pre><code>#ifndef MAMMAL_H
#define MAMMAL_H

using namespace std;

class Mammal
{
public:
    Mammal(); //Default constructor

    Mammal( int newWeight);  //Parameterized constructor

    void SetWeight(int newWeight);

    virtual string GetName() const;

    int GetWeight() const;
    //virtual function to be  defined by derived animal classes
    virtual void Speak() const;
private:
    int weight;

};

#endif
</code></pre>

<p>Mammal.cpp</p>

<pre><code>#include &lt;iostream&gt;
#include &lt;string&gt;
#include "Mammal.h"

using namespace std;

Mammal::Mammal()
{
    SetWeight(0);
    cout&lt;&lt;"\nInvoking default Mammal Constructor\n";
}

Mammal::Mammal( int newWeight)
{
    SetWeight(newWeight);
    cout&lt;&lt;"\nInvoking parameterized Mammal Constructor\n";
}

void Mammal::SetWeight(int newWeight)
{
    weight=newWeight;
}

int Mammal::GetWeight() const
{
    return weight;
}

string Mammal::GetName() const
{}

void Mammal::Speak() const
{
    cout&lt;&lt;"\nLadies and gentlemen, the mammal speaks...\n";
}
</code></pre>

<p>Dog.h</p>

<pre><code>#ifndef DOG_H
#define DOG_H

#include "Mammal.h"

using namespace std;

class Dog: public Mammal
{
public:
    Dog(); //Default constructor

    Dog(const int&amp; newWeight,const string&amp; newName);  //Parameterized constructor

    void SetName(string newName);

    string GetName() const;
    //mammal virtual function 
    virtual void Speak() const;

private:
    string name;
};

#endif
</code></pre>

<p>Dog.cpp</p>

<pre><code>#include &lt;iostream&gt;
#include &lt;string&gt;
#include "Dog.h"

using namespace std;
//Default constructor
Dog::Dog()
{
    cout&lt;&lt;"\nInvoking default Dog constructor\n";
}
//Parameterized constructor
Dog::Dog( const int&amp; newWeight,const string&amp; newName):Mammal(newWeight)  
{
    SetName(newName);
    cout&lt;&lt;"\nInvoking parameterized Dog constructor.\n";
}

void Dog::SetName(string newName)
{
    name=newName;
}

string Dog::GetName() const
{
    return name;
}
//mammal virtual function 
void Dog::Speak() const
{
    Mammal::Speak();
    cout&lt;&lt;"\nWoof!\n";
}
</code></pre>

<p>The other derived classes(horse, pig, and cat) are all identical to Dog.  I'm getting a Exc_Bad_Access error when ListAnimals() gets to GetWeight().  As far as I can tell it's returning the right file type.  Any help would be awesome </p>
