dynamic-memory-allocation相关内容
我刚刚编译了这段代码,它向我显示了此错误: 在ConsoleApplication5.exe中的0x0F640E09(ucrtbased.dll)处引发了异常:0xC0000005:访问冲突写入位置0x014C3000.我真的不知道这个错误是什么意思,因为我刚刚使用C ++几个月了,我也曾尝试在任何其他网站上寻求帮助,但没有找到任何帮助. 对于此代码,只允许使用c字符串函数和
..
释放指针后,指针的值是否为NULL? int* p = malloc(sizeof(*p)); free(p); if(p==NULL) printf("Null\n"); else printf("Not null\n"); 输出: Not null 好吧,我认为不是; 无论如何,我今天早些时候问了一个问题: 在此处查看: C-如何释放动态分
..
在每次循环迭代中分配大块的堆内存是否存在明显的性能损失?当然,我会在每次迭代结束时释放它. 另一种选择是在进入循环之前分配一次,在所有迭代中重复使用它,并最终在退出循环后释放它.请参见下面的代码. // allocation inside loop for(int i = 0; i
..
我对这三个概念有些困惑:堆栈,堆和动态内存分配.我将用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应该已经被移动了.因此,我对内存分配和初始化程序评估之间的相对顺序感兴趣.它是定义的,未指定的还
..
我是MPI的新手,我试图并行管理大小不同的数组,然后将它们传递到主线程,但到目前为止没有成功. 我了解到 MPI_Gatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, const int *recvcounts, const int *displs,
..
我需要创建一个结构,该结构包含可变数量的'char [2]',即2个字符的静态数组. 我的问题是,如何为x个char [2]分配内存. 我尝试了此操作(假设定义了int x): char** m = NULL; m = new char[x][2]; ... delete [] m; (无效) 我意识到我可以使用std :: vector作为容器,
..
c ++中的new运算符有很多面孔,但是我对new放置感兴趣. 假设您在特定的内存位置分配内存 int memoryPool[poolSize*sizeof(int)]; int* p = new (mem) int; //allocates memory inside the memoryPool buffer delete p; //segmentation fault
..
我正在用C开发一个程序,该程序使用链接列表(原始哈希表)数组作为数据类型来表示某些日期信息.该数组具有与一年中的月份相对应的十二个元素,并且每个月都有一个包含数据节点的链表. 我开发了使用此数据类型的模块,并且运行良好.后来我发现我正在访问超出范围的数组元素(例如,通过索引12而不是11访问第12个元素).但是该程序始终如一地工作,没有发生任何事件.我从未收到过分段错误.此后,我已经纠正了编
..
我正在尝试将内存动态分配到堆中,然后在这些内存地址中分配值.我知道如何分配内存,但是如何将寄存器中的值分配给该第一个动态内存地址? 这是我到目前为止所拥有的: push rbp mov rbp, rsp ;initialize an empy stack to create activation records for the rest of the sub
..
看看这段代码,它是链接列表的一部分. int main() { List* head1 = NULL; insertFront(&head1, 1); insertFront(&head1, 2); print(head1); free(head1); return 0; } 另一个功能是: void insertFront
..
在C ++如何编程有一段写着: 一种常见的编程做法是分配动态内存,分配地址 该内存指向一个指针,使用该指针操作该内存并释放该内存. 当不再需要内存时,使用删除将其删除.如果之后发生异常 成功分配内存,但在执行delete语句之前,内存泄漏 可能发生. C ++标准在标头中提供了类模板unique_ptr 处理这种情况. 任何人都可以向我介绍一个发生异常和内存泄漏的真实示例解决方案 c
..
我想使用C ++ 11的std::aligned_alloc,但不幸的是,它不适用于Microsoft Visual Studio2013. 我正在考虑intsead自己实现aligned_alloc.一个实现应该是什么样子?以下示例无法编译,因为它无法从void*转换为void*&. template T* aligned_alloc( std::size
..
我写了一个简单的例子: #include int main() { void* byte1 = ::operator new(1); void* byte2 = ::operator new(1); void* byte3 = malloc(1); std::cout
..
C11标准添加了aligned_alloc函数来分配未初始化的对齐内存. 该标准还包括calloc函数以分配已初始化为零的内存,但只能将其与最大类型的大小对齐. 为什么C11标准不包括分配初始化为零的对齐内存的aligned_calloc函数? 我知道您可以只设置结果以获取初始化的内存,但是calloc函数在某些操作系统上非常有用,因为为了安全起见,内核提供的内存通常必须已经初始化为零
..
如果我有以下说法: 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查找退出
..
在C程序中,我遇到需要大量内存块的事务,我需要知道是否存在用于处理所有这些malloc/free的算法或最佳实践方法,我已经使用数组来存储这些内存块但是在某个时候数组本身变满了,重新分配数组只会浪费更多,解决这个问题的优雅方法是什么? 解决方案 在这种情况下,最好的算法是免费列表分配器+二进制搜索树. 您要从系统中请求一个大内存块,然后从该块中分配固定大小的内存块.当块已满时,您正在
..