我有一个问题,将包含一个类/结构数组(我尝试结构和类的问题仍然存在)包含std向量的成员malloc/realloc内存。我知道我可以通过使用新的和std数组容器类来避开这个问题。然而,我想更好地理解为什么当我使用realloc而不是malloc时(如我在将更大的代码项目从C转换到C++的上下文中遇到此问题),以下小代码崩溃。它似乎也不一定在类/结构中设置矢量的初始大小(有些编译器允许一些不用..) - 那么什么是类中的矢量 - 一个舒适的指针?使用malloc/realloc为包含std向量的类/结构数组
感谢, 凯
#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;
}
1.您为什么使用'使用命名空间std;' - 的是[不好的主意](http://stackoverflow.com/questions/1452721/why-is-using-namespace-std-in-c-considered-bad-practice)。 2为什么你使用'malloc'而不是'new' –
为什么你使用'printf'而不是'cout'? –
@EdHeal:你为什么要检查代码而不回答问题? ;-) –