dynamic-memory-allocation相关内容

在ConsoleApplication5.exe中的0x0F640E09(ucrtbased.dll)引发异常:0xC0000005:访问冲突写入位置0x014C3000?

我刚刚编译了这段代码,它向我显示了此错误: 在ConsoleApplication5.exe中的0x0F640E09(ucrtbased.dll)处引发了异常:0xC0000005:访问冲突写入位置0x014C3000.我真的不知道这个错误是什么意思,因为我刚刚使用C ++几个月了,我也曾尝试在任何其他网站上寻求帮助,但没有找到任何帮助. 对于此代码,只允许使用c字符串函数和 ..
发布时间:2020-05-28 23:39:44 C/C++开发

堆栈,堆和动态内存分配

我对这三个概念有些困惑:堆栈,堆和动态内存分配.我将用C ++提供示例. 我是说一个程序,对于它的所有变量,数组,也许还有堆栈上的对象,当程序刚刚启动时,所需的所有内存空间已经存在,所以所有的东西都是预先确定的吗?但是在程序运行时,对我来说,它仍然听起来像“动态的",因为堆栈仍在变化,从某种意义上说,值仍在运行时被压入堆栈,从堆栈中弹出. 关于堆,出于“动态"的意义,我从这个站点上的一 ..
发布时间:2020-05-21 19:13:07 C/C++开发

多维数组的运行时分配

到目前为止,我认为以下语法无效, int B[ydim][xdim]; 但是今天我尝试了并且成功了!我运行了很多次以确保它不是偶然的,即使valgrind也没有报告任何 segfault 或内存泄漏!我很惊讶它是g ++中引入的新功能吗?我一直使用一维数组来存储矩阵,方法是按照正确的步幅对它们进行索引,如下面程序中的A所示.但是,与B一样,这种新方法是如此简单而优雅,以至于我一直想要.使 ..

删除不是使用新表达式构造的对象实际上可以吗?

就目前而言,这可能不行.根据 cppref : 如果 expression 是其他任何东西,包括如果它是通过new-expression的数组形式获得的指针,则行为是不确定的. 放在一边,下面的代码在实践中是否可以使用(T是非数组,并假定未替换new)? auto p = (T*)operator new(sizeof(T)); new(p) T{}; delete p; 据 ..

在新表达式中分配内存后是否对初始化程序求值?

考虑代码 auto p = new T( U(std::move(v)) ); 则初始化器为U(std::move(v)).假设T( U(std::move(v)) )没有抛出.如果在基础内存分配之后对初始化程序进行了评估,则该代码将是强异常安全的.否则,事实并非如此.如果抛出了内存分配,则v应该已经被移动了.因此,我对内存分配和初始化程序评估之间的相对顺序感兴趣.它是定义的,未指定的还 ..

访问动态分配的数组的界外元素/不包含SegFault

我正在用C开发一个程序,该程序使用链接列表(原始哈希表)数组作为数据类型来表示某些日期信息.该数组具有与一年中的月份相对应的十二个元素,并且每个月都有一个包含数据节点的链表. 我开发了使用此数据类型的模块,并且运行良好.后来我发现我正在访问超出范围的数组元素(例如,通过索引12而不是11访问第12个元素).但是该程序始终如一地工作,没有发生任何事件.我从未收到过分段错误.此后,我已经纠正了编 ..
发布时间:2020-05-08 21:49:02 其他开发

C ++中的内存泄漏示例(通过使用异常)

在C ++如何编程有一段写着: 一种常见的编程做法是分配动态内存,分配地址 该内存指向一个指针,使用该指针操作该内存并释放该内存. 当不再需要内存时,使用删除将其删除.如果之后发生异常 成功分配内存,但在执行delete语句之前,内存泄漏 可能发生. C ++标准在标头中提供了类模板unique_ptr 处理这种情况. 任何人都可以向我介绍一个发生异常和内存泄漏的真实示例解决方案 c ..
发布时间:2020-05-08 20:57:46 C/C++开发

为什么C11中没有对齐的calloc

C11标准添加了aligned_alloc函数来分配未初始化的对齐内存. 该标准还包括calloc函数以分配已初始化为零的内存,但只能将其与最大类型的大小对齐. 为什么C11标准不包括分配初始化为零的对齐内存的aligned_calloc函数? 我知道您可以只设置结果以获取初始化的内存,但是calloc函数在某些操作系统上非常有用,因为为了安全起见,内核提供的内存通常必须已经初始化为零 ..
发布时间:2020-05-08 20:27:58 其他开发

C ++-使用"new"在堆上分配内存

如果我有以下说法: int *x = new int; 在这种情况下,我已经在堆上动态分配了内存.换句话说,我现在有一个reserved对象的reserved内存地址. 接着说,我做了以下事情: delete x; 这意味着我freed up堆上的内存地址. 说完之后,我再次执行以下操作: int *x = new int; x会指向它在删除之前指向 ..

当内存分配号不总是相同时,如何检测内存泄漏?

我的程序出现了这样的内存泄漏(55字节). 我正在使用C ++,MFC,Visual Studio 2010. 检测到内存泄漏! {13497}正常块,位于0x0E44C248,长55个字节. 数据:44 3A 5C 46 44 41 53 .... 问题是,内存分配号"13497"并不总是相同.如果我再次运行该程序,它将始终是不同的数字. 我想使用_crtBreakAlloc查找退出 ..
发布时间:2020-05-08 19:58:55 C/C++开发

哪种算法适用于小内存块的连续重新分配?

在C程序中,我遇到需要大量内存块的事务,我需要知道是否存在用于处理所有这些malloc/free的算法或最佳实践方法,我已经使用数组来存储这些内存块但是在某个时候数组本身变满了,重新分配数组只会浪费更多,解决这个问题的优雅方法是什么? 解决方案 在这种情况下,最好的算法是免费列表分配器+二进制搜索树. 您要从系统中请求一个大内存块,然后从该块中分配固定大小的内存块.当块已满时,您正在 ..