c++ - C++ 动态分配内存中的动态内存分配

标签 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() 是如何分配内存的?我真的很感激一个数字示例。

最佳答案

Is there a possibility the memory blocks allocated for test.b[i].c to overlap with the memory blocks that have been previously allocated for test.b?

没有。

If that is possible to happen how can I prevent it from happening?

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

If it is not possible can you explain exactly how calloc() allocates memory?

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

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

关于c++ - C++ 动态分配内存中的动态内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17308883/

相关文章:

c++ - 将派生类视为基类 - 它如何帮助我们避免编写更多代码?

java - Windows 上的 Thrift/Google Protocol Buffers

c++ - 我误解了这个伪代码吗?

c++ - 如何使用广播将二维数组传递给所有进程?

java - 在java eclipse中读取文本文件作为二维数组错误

testing - 如何使用 powershell 最大化内存使用

c++ - 为什么并行 for_each 需要前向迭代器?

c++ - 用户创建程序失败

c - 花车和多头

c++ - 获取dylib模块的SizeOfImage和EntryPoint