Trying to pass pointer for array:
class aaa{
public:
    int a ;
    int b ;
    std::string c ;
};
void abc(aaa* a [])
{
    *a = (aaa*)malloc(sizeof(aaa)* 5);
    a[0]->c ="ddd" ;
    a[1]->c ="ccc" ;  //crash
    a[2]->c ="eee" ;
}
int main() {
    aaa * a;
    abc(&a);
    cout << "!!!Hello World!!!"<< a++->c << endl; 
    cout << "!!!Hello World!!!"<< a++->c << endl; 
    return 0;
}
On second array element assignment I have crash. Where is the problem? Does malloc not creates enough space?
UPD.
I can't change function void abc(aaa* a []) signature because of some reason. It is not mistakable signature even it looks not nice.
I have updated program according recomendations in answers, but I still have crash in getting second array element member:
cout << "!!!Hello World!!!"<< a[1].c << endl;
Why? What I do wrong in code below?
struct aaa{
public:
    int a ;
    int b ;
    std::string c ;
};
int abc(aaa* a [])
{
    int asize =5;
    *a = (aaa*)malloc(sizeof(aaa) * asize);
    for (int i;i<asize;i++)
    {
        a[i] = new aaa();
    }
    a[0]->c ="ddd" ;
    a[1]->c ="ccc" ;
    a[2]->c ="eee" ;
return asize;
}
int main() {
    aaa * a;
    int asize=abc(&a);
    cout << "!!!Hello World!!!"<< a[0].c << endl;
    cout << "!!!Hello World!!!"<< a[1].c << endl; //crash
    cout << "!!!Hello World!!!"<< a[2].c << endl;
    for (int i=0; i<asize;i++)
    {
        cout << "free "<<i<<endl;
        a[i].~aaa();
    }
    free(a);
    cout << "end"<<endl;
    return 0;
}
 
     
    