C++ != C ~= Lite-C
When you allocate dynamically a struct, you just reserve a certain memory block. This block is filled with previous data. With the zero macro you can simply reset everything to 0.
When you need special initialization values, write a function in a constructor fashion:
MyStruct* MyStructCreate() {
MyStruct* s = (MyStruct*)malloc(sizeof(MyStruct));
s->nr = 2;
strcpy(s->charArray, "String");
//...
return(s);
}