无法在指针数组中分配

时间:2014-03-15 14:39:48

标签: c++ arrays pointers

我的问题在adaugare函数中,我想persoane[numar_persoane] = pers。因为那条线给了我这个错误。我有什么问题?

我必须使用动态指针数组。

class baze
    {
    private: int numar_persoane=0;
             persoana (*persoane)=(persoana *)malloc(0);

public:  baze()
     {

             persoane = NULL;

     }
     ~baze()
     {
         delete[] persoane; //???????????
     }

     void adaugare(persoana pers)
     {

         numar_persoane++;
            realloc(persoane, sizeof(persoana)*numar_persoane);
         persoane[numar_persoane] = pers;

     };
 void afisarealfa()
         {
             for (int i = 0; i < numar_persoane; i++)
             for (int j = i + 1; j < numar_persoane; j++)
             if (persoane[i].gnume()>persoane[i].gnume())
             {
                 persoana aux;
                 aux = persoane[i];
                 persoane[i] = persoane[j];
                 persoane[j] = aux;
             }
             for (int i = 0; i < numar_persoane; i++)
             {
                 cout << "Nume:" << persoane[i].gnume() << endl;
                 cout << "Varsta" << persoane[i].gan() << endl;
                 cout << "sex" << persoane[i].gsex();
             }
}

这是persoana课程:

class persoana
{
private: string nume;
         int an;
         char sex;
public: void snume(string numebagat)
{
            nume = numebagat;
}
        string gnume()
        {
            return nume;
        }
        void san(int anbagat)
        {
            an = anbagat;
        }
        int gan()
        {
            return an;
        }
        void ssex(char sexbagat)
        {
            sex = sexbagat;
        }
        char gsex()
        {
            return sex;
        }

};

主:

int _tmain(int argc, _TCHAR* argv[])
{
    persoana a;
    a.san(1990);
    a.snume("Gogu");
    a.ssex('m');
    cout << "Nume: " << a.gnume() << endl << "Anul nasterii: " << a.gan() << endl << "Sex: " << a.gsex();
    baze b;
    b.adaugare(a);
    return 0;

}

1 个答案:

答案 0 :(得分:2)

  1. 正如@simpletron指出的那样,malloc(0)有点奇怪。我甚至不确定它是否合法,但是根据what's the point in malloc(0)?,它是合法的,虽然是实现定义的(它可能是NULL,它可能是一个有效的空区域;无论哪种方式,你都可以免费调用它,并且每个Is a malloc() needed before a realloc()?你可以跳过那个malloc;
  2. 使用malloc但不建议删除;每Behaviour of malloc with delete in C++,这是未定义的行为;你可能应该使用免费的realloc而不是删除
  3. 你有一个错误。你应该使用persoane [numar_persoane-1] = pers;
  4. 您可能应该在构造函数中将年龄/性别设置为某个默认值。
  5. 这可能是我个人的偏好,但我不喜欢复制类与指向类的指针。