Uso de malloc / realloc para una matriz de clases / estructuras, incluido el vector estándar

Tengo una pregunta wrt malloc / realloc memory que contendrá una matriz de miembros class / struct (probé tanto struct como class el problema sigue siendo) que incluyen vectores estándar. Sé que puedo evitar el problema usando una clase de contenedor de matriz nueva y estándar. Sin embargo, me gustaría entender mejor por qué el siguiente código se bloquea cuando uso realloc en lugar de malloc (ya que encontré este problema en el contexto de la transición de un proyecto de código más grande de C a C ++). También parece que no necesariamente puedo establecer un tamaño inicial de un vector en una clase / estructura (algunos compiladores permiten que algunos no ...), entonces, ¿qué es un vector en una clase, un puntero cómodo?

Gracias Kai

#include <stdlib.h>
#include <limits.h>
#include <float.h>
#include <stdio.h>
#include <math.h>
#include <string.h>
#include <sys/types.h>
#include <vector>
/* mpic++ -O3 -ffast-math -pedantic vec-alloc.cpp -o vec-alloc */

using namespace std;

class float_vector{
public:
  double x;
  double y;
  double z;
  float_vector() : x(0), y(0), z(0) {};
};


class voxel{
public:
  float_vector   x;
  vector<double> y;

  voxel() : x() {};
};

int main(){

  int i;
  double d =1.111;
  voxel v0, *Comp, *Comp2;

  /* dynamically allocate memory */
  Comp= (voxel*)malloc(10*sizeof(voxel));
  for(i=0;i<10;++i) Comp[i] = v0;
  printf("malloc done\n");

  /* dynamically re-allocate memory */
  Comp2= (voxel*)malloc(sizeof(voxel));  
  printf("realloc done\n");
  for(i=0;i<10;++i){
    Comp2 =(voxel*)realloc(&Comp2[0], (i+1)*sizeof(voxel));
    Comp2[i] = v0;
  }  

  printf("realloc done\n");

  for(i=0;i<10;++i) Comp[i].y.push_back(d);
  for(i=0;i<10;++i) printf("%lf\n",Comp[i].y[0]);

  for(i=0;i<10;++i) Comp2[i].y.push_back(d); // this crashes
  for(i=0;i<10;++i) printf("%lf\n",Comp2[i].y[0]);

  return 1;
} 

Respuestas a la pregunta(3)

Su respuesta a la pregunta