【发布时间】:2011-01-30 08:33:33
【问题描述】:
我正在编辑一段代码,它是一个大项目的一部分,它使用“const's”来初始化一堆数组。 因为我想对这些 const 进行参数化,所以我必须调整代码以使用“malloc”来分配内存。 不幸的是,结构存在一个问题:我无法在结构本身中分配动态内存。在外面做会导致对原始代码的大量修改。
这是一个小例子:
int globalx,globaly;
struct bigStruct{
struct subStruct{
double info1;
double info2;
bool valid;
};
double data;
//subStruct bar[globalx][globaly];
subStruct ** bar=(subStruct**)malloc(globalx*sizeof(subStruct*));
for(int i=0;i<globalx;i++)
bar[i]=(*subStruct)malloc(globaly*sizeof(subStruct));
};
int main(){
globalx=2;
globaly=3;
bigStruct foo;
for(int i=0;i<globalx;i++)
for(int j=0;j<globaly;j++){
foo.bar[i][j].info1=i+j;
foo.bar[i][j].info2=i*j;
foo.bar[i][j].valid=(i==j);
}
return 0;
}
注意:在我正在编辑的程序代码中,globalx 和 globaly 在指定的命名空间中是 const 的。现在我删除了“const”,因此它们可以充当只设置一次的参数。
总结:如何正确地为结构内的子结构分配内存? 非常感谢!
最大
【问题讨论】:
-
您确定这是
c++而不是c? -
不要在对象上使用
malloc或free。构造函数和析构函数不会被调用。使用new和delete -
这就是所谓的糟糕的c++风格。孩子们,永远不要这样做。
-
对于这里的混乱,我深表歉意。这是我正在编辑的外部项目的 C++ 代码中的一段 C 代码。
-
现在,您似乎在
struct中拥有原始代码,而不是在函数中。这既不合法也不很有帮助。您是否要声明struct bigStruct变量调用构造函数或其他什么?你不能在 C 中做到这一点。