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

时间:2013-06-25 22:52:24

标签: c++ arrays memory dynamic allocation

我想问一个关于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()如何分配内存吗?我真的很感激一个数字例子。

1 个答案:

答案 0 :(得分:4)

  

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

没有

  

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

不可能发生,所以不要担心。

  

如果不可能,你能准确解释calloc()如何分配内存吗?

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

我不确定“数字示例”是什么意思。