Использование malloc / realloc для массива классов / структур, включая вектор std

У меня есть вопрос относительно памяти malloc / realloc, которая будет содержать массив членов класса / структуры (я пробовал и структуру, и класс, проблема остается), которые включают векторы std. Я знаю, что могу обойти проблему, используя новый класс контейнера std и массив. Однако я хотел бы лучше понять, почему следующий небольшой код вылетает, когда я использую realloc вместо malloc (поскольку я столкнулся с этой проблемой в контексте перехода более крупного проекта кода с C на C ++). Кажется также, что я не могу обязательно установить начальный размер вектора в классе / структуре (некоторые компиляторы допускают, а некоторые нет ..) - так что же такое вектор в классе - удобный указатель?

Спасибо Кай

#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;
} 

Ответы на вопрос(3)

Ваш ответ на вопрос