有关动态内存开辟(new与C库函数malloc等)的一些疑问

舟_井 舟_井 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区

 许久没有上社区查看了,翻回到这篇博客,看到了一个比较清晰的对比,与评论区热心朋友们的解答一致,故贴于此处,此贴完结!谢谢大家的耐心解答~

new、delete和malloc、free详解与混用问题 -- 木凡辰

背景:

本次有关图的作业需要存储一个复合数据,由于懒得构造结构体便采取数组,希望构建一个v-d-3的三维数组(v为结点数,d为点的degree,3为三个数据:指向点v、时间开销time与金钱开销cost),然而却遇到了一些问题

问题:

1、问题的出现

当采用new开辟三维数组的第一纬v时

gg=new int** [v];        //开辟v个int**指针

后续calloc函数无法进行,其原因为gg==nullptr(猜测),如下图所示:(为保证看清,图片较大,请谅解!)

 2、问题的探索

希望搞明白出了什么问题(希望完成作业),我开始探索是否其为nullptr,便完全通过new构造了一个三维数组并存入i,再顺序输出,发现完全采用new是可以正常构造出三维数组的,见下图:(此时三维数组可以顺利创建,蓝框仅标记疑问点)

 

 进一步的,通过采用逐步调试的方法、完全使用malloc、calloc等C库函数开辟空间,并查看此时的内存情况,发现此时程序可正常执行完并实现输出,但监视器并不能读取三维数组内的内容,可以肯定的是此时其不为nullptr,见下图:

 但为什么new与malloc等函数不能通用呢?期待大佬们的指点解答,谢谢!

...全文

相关推荐

Malloc和new区别

1 ,malloc 与free 是C++/C 语言的标准库函数,new/delete 是C++ 的运算符。它们都可用于申请动态内存和释放内存。 2 ,对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡 之前要自动执行析构函数。由于malloc/free 是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的 任务强加于malloc /free. 3 ,因此C++ 语言需要一个能完成动态内存分配和初始化工作的运算符new ,以一个能完成清理与释放内存工作的运算符delete.注意ne w/delete 不是库函数。 4 ,C++ 程序经常要调用C函数,而C 程序只能用malloc/free 管理动态内存 new 是个操作符,和什么"+","-","="……有一样的地

Jake443403168

C语言动态内存分配之malloc与realloc区别

在程序的执行期间分配内存时,内存区域中的这个空间称为堆(heap)。还有另一个内存区域,称为栈(stack),其中的空间分配给函数的参数和本地变量。在执行完该函数后,存储参数和本地变量的内存空间会释放。堆中的内存是由程序员控制的。在分配堆上的内存时,由程序员跟踪所分配的内存何时不再需要,并释放这些空间,以便于以后重用它们。   使用动态内存很明显的好处是:不需要预先分配存储空间且分配的空间可以根据程序的需要扩大或缩小,这样可以有效的使用内存空间。   malloc和free   C函数库中的malloc和free分别用于执行动态内存分配和释放。这两个函数的原型如下所示,他们都在头文件st

weixin_38545463

C++中new和malloc的区别

本文主要介绍了C++中new和malloc的区别,希望对你的学习有所帮助。

weixin_38718690

new与malloc 的区别和用法

new与malloc 的区别和用法 new与malloc 的区别和用法 new与malloc 的区别和用法 new与malloc 的区别和用法 new与malloc 的区别和用法 new与malloc 的区别和用法 new与malloc 的区别和用法

tarofriend

C malloc函数用法

malloc函数的实质体现在,它有一个将可用的内存块连接为一个长长的列表的所谓空闲链表。调用malloc函数时,它沿连接表寻找一个大到足以满足用户请求所需要的内存块。然后,将该内存块一分为二(一块的大小与用户请求的大小相等,另一块的大小就是剩下的字节)。

weixin_38745434
评论 10
收藏 已收藏
分享
返回顶部
舟_井
C++ 语言 65,214 成员 250,514 内容