结构中的动态内存

Max*_*ien 5 c malloc struct const

我正在编辑一段代码,这是一个大项目的一部分,它使用"const"来初始化一堆数组.因为我想参数化这些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;
}
Run Code Online (Sandbox Code Playgroud)

注意:在程序代码中,我正在编辑globalx,而globaly是指定命名空间中的const.现在我删除了"const",这样它们就可以作为一次设置的参数.

总结:如何为结构内的子结构正确分配内存?非常感谢你!

马克斯

MSa*_*ers 6

我怀疑你对C++的经验不多.逻辑解决方案是在构造函数中分配内存.从这个级别开始教授C++会相当复杂.


Gle*_*len 4

这是 C 或 C++ 代码。标签上写着 C++,但代码看起来就像 C。为什么使用malloc而不是new

来回答你的问题。为该结构提供一个构造函数来分配内存,并为该结构提供一个析构函数来删除它。

请记住,在 C++ 中,类和结构之间的唯一区别是,类中的成员默认为私有成员,而结构中的成员默认为公共成员。