C++上动态分配内存中的动态内存分配

Dynamic memory allocation within dynamic allocated memory on C++

本文关键字:内存 动态 分配 动态分配 C++      更新时间:2023-10-16

我想问一个关于C++中动态内存分配的问题。我知道我将要提出的问题的性质很容易使用简单的C++技术来解决,但对于这个特定的练习,我必须使用更像C的方法。让我举一个例子:

我有以下结构:

typedef struct A{
    B *b;
    int a;
}
typedef struct B{
    C *c;
    int x;
}
typedef struct C{
    int y;
}

让我们假设主要是:

int main(){
    A test;
    test.a = 1;
    test.b = (B*)calloc(2,sizeof(B));
    test.b[0].c = (C*)calloc(2,sizeof(C)); 
    test.b[0].x = 2; 
    test.b[0].c[0].y = 3;
    test.b[0].c[1].y = 4;
    test.b[1].c = (C*)calloc(2,sizeof(C));
    test.b[1].x = 5;
    test.b[1].c[0].y = 6;
    test.b[1].c[1].y = 7;
}

因此,我的问题如下:会发生什么?分配给test.b[i].c的存储块是否有可能与之前分配给test.b的存储块重叠?如果这种情况可能发生,我该如何防止这种情况发生?如果不可能,你能解释一下calloc()是如何分配内存的吗?如果有一个数字示例,我将不胜感激。

分配给test.b[i].c的内存块是否有可能与之前分配给test.b的内存块重叠?

没有。

如果这种情况可能发生,我该如何防止这种情况发生?

这不可能发生,所以别担心。

如果不可能,你能解释一下calloc()是如何分配内存的吗?

每次调用calloc时,它都会返回一个指向零初始化内存块的指针,该内存块的大小足以容纳所请求的对象数,如果失败,则返回NULL。只要你没有拿回NULL,你就没有什么可担心的了。

我不知道你说的"数字示例"是什么意思。