5

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

4

1 回答 1

4

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

不。

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

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

如果不可能,您能否准确解释 calloc() 是如何分配内存的?

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

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

于 2013-06-25T22:55:18.087 回答