C++ Can';t在指针数组中赋值

C++ Can';t在指针数组中赋值,c++,arrays,pointers,C++,Arrays,Pointers,我的问题是这一行的adaugare函数我认为persoane[numar\u persoane]=pers。因为那一行给了我这个错误。我有什么问题 我必须使用指针的动态数组 class baze { private: int numar_persoane=0; persoana (*persoane)=(persoana *)malloc(0); public: baze() { persoane = NULL;

我的问题是这一行的
adaugare
函数我认为
persoane[numar\u 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();
             }
}
主要内容:

int-tmain(int-argc,_-TCHAR*argv[]
{
persoana a;
a、 san(1990年);
a、 斯努姆(“古”);
a、 ssex(“m”);
库特
  • 正如@simpletron所指出的,malloc(0)有点奇怪。我甚至不确定它是否合法,但根据,它是合法的,尽管是实现定义的(它可能为NULL,它可能是一个有效的空区域;无论哪种方式,您都可以免费调用它,并且根据您可以跳过该malloc
  • 不建议使用malloc但随后删除;根据,这是未定义的行为;您可能应该使用free to go with realloc而不是delete
  • 您有一个off by one错误。您应该使用persoane[numar_persoane-1]=pers
  • 您可能应该在构造函数中将年龄/性别设置为某个默认值
  • 这可能是我个人的偏好,但我不喜欢复制类而不是指向类

  • 您的
    persoana(*persoana*)malloc(0);
    将其大小分配为0,这是胡说八道。您应该更改为
    persoana(*persoana*)=(persoana*)malloc(sizeof(persoana*);
    如果您有N个对象,它们的编号从0到N-1;最后一个不在索引N处。
    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;
    
    }