C++上动态分配内存中的动态内存分配
Dynamic memory allocation within dynamic allocated memory on C++
我想问一个关于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
,你就没有什么可担心的了。
我不知道你说的"数字示例"是什么意思。
相关文章:
- 在调用FreeLibrary后,释放动态链接到具有相同版本的CRT堆的DLL的内存
- 在以唯一ptr为值的C++映射中,动态内存何时会被销毁
- 对具有动态分配的内存和析构函数的类对象的引用
- 以下代码执行哪种内存分配(动态或静态)?
- 开放 CV 中的动态内存分配,用于视频处理
- 调用析构函数以释放动态分配的内存
- 为什么类和 main() 函数中也有动态内存分配
- 将静态内存更改为动态C++
- 在没有动态内存的世界中,我是否需要虚拟析构函数?
- 在运行时为动态分配的内存输入值
- c++ 动态内存 堆栈中的分配
- 释放动态分配的内存时是否需要执行此额外步骤
- 动态分配字符数组的内存
- 销毁C++中动态分配的内存(数组对象)
- 给定特定内存地址的数组的动态内存分配
- 释放动态内存时C++错误
- 对内存动态分配的类不使用"*"的逻辑
- 如果我将内存动态分配给静态变量,我应该释放它还是会自动释放它
- 给定内存地址的内存动态初始化
- 删除指针分配的内存(动态数组)