草庐IT

c++ - 将使用 "new"分配的内存传递给 C 库是否安全?

我知道newdelete与mallocfree不兼容。这是否意味着我应该避免对将由C库使用的内存使用new?当我将内存传递给C库时,使用new而不是malloc会出现什么问题?voidfunc(){int*p=newint(42);//ShouldIinsistonusingmallocforpifthisfunctionisapart//ofaClibrary?lib_func(p);} 最佳答案 内存就是内存,怎么分配都无所谓。只要您将new与delete、new[]与delete[]以及malloc/calloc和free(还

c++ - 更改 C++ vector 的保留内存

我有一个包含1000个“节点”的vectorif(count+1>m_listItems.capacity())m_listItems.reserve(count+100);问题是当我要重新填充它时,我也把它清除了。m_listItems.clear();容量不变。我用过resize(1);但这似乎并没有改变容量。那么如何改变储备呢? 最佳答案 vector(m_listItems).swap(m_listItems);将再次收缩m_listItems:http://www.gotw.ca/gotw/054.htm(赫伯萨特)如果你

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

在C中++Howtoprogram有一段说:Acommonprogrammingpracticeistoallocatedynamicmemory,assigntheaddressofthatmemorytoapointer,usethepointertomanipulatethememoryanddeallocatethememorywithdeletewhenthememoryisnolongerneeded.Ifanexceptionoccursaftersuccessfulmemoryallocationbutbeforethedeletestatementexecutes,a

c++ - 如何在 C++ 中释放静态成员变量?

谁能解释一下如何释放静态成员变量的内存?以我的理解,只有在该类的所有实例都被销毁后才能释放它。此时我有点无助...一些代码来解释它:classball{private:staticSDL_Surface*ball_image;};//FIXME:howtofreestaticVariable?SDL_Surface*ball::ball_image=SDL_LoadBMP("ball.bmp"); 最佳答案 指针本身将一直存在,直到程序关闭。然而,它指向的是公平游戏。您可以随时释放它。如果您担心的是内存泄漏,那么您有几个我看到的选项

C++:我可以使用指针超出应用程序内存的范围吗?

如果我有这样一些愚蠢的代码:intnBlah=123;int*pnBlah=&nBlah;pnBlah+=80000;*pnBlah=65;我可以更改另一个应用程序的内存吗?你已经向我解释了这是邪恶的,我知道。但我只是感兴趣。这不是简单尝试的事情。我不知道会发生什么。谢谢 最佳答案 在C++术语中,这是未定义的行为。实际发生的情况取决于许多因素,但最重要的是取决于您使用的操作系统(OS)。在现代内存管理的操作系统上,您的应用程序将因尝试访问进程地址空间之外的内存而因“段错误”(实际术语取决于操作系统)而终止。然而,一些操作系统没有这

c++ - 使用 C++ 模拟低内存

我正在调试一个在内存不足的情况下失败的程序,并且想要一个只消耗大量内存的C++程序。任何指针都会有所帮助! 最佳答案 您在Windows平台上吗(查看用户名...也许不是:))如果您在Windows平台上,AppVerifier具有低内存模拟模式。请参阅低资源模拟测试。 关于c++-使用C++模拟低内存,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/1923664/

C++ 内存管理和 vector

我对与vector相关的内存管理感到非常困惑,可以解释一些基本概念。我有一个使用大vector的程序。我使用new运算符创建vector,并在程序结束时使用delete释放它们以获得内存恢复。我的问题是,如果程序因任何原因崩溃或中止,delete行将丢失,有没有办法恢复内存,即使在这种情况。我还分配了一些其他大vector,但没有使用new关键字。我已经读到,这些将在堆上创建,但无论如何都不需要释放,因为内存管理是在“幕后”处理的。但是我不确定是不是这种情况,因为每次我运行程序时都会丢失RAM。所以我的第二个问题是,如果不使用new关键字创建的vector是否真的可以留给它们自己的设备

c++ - C++ 什么时候从内存中删除变量?

我使用C++有一段时间了。我只是不确定内存管理是如何工作的,所以这里是:我首先不确定函数中的内存是如何取消分配的,例如:intaddTwo(intnum){inttemp=2;num+=temp;returnnum;}所以在这个例子中,temp会在函数结束后从内存中删除吗?如果不是,这是怎么做到的。在C#中,一旦变量的作用域用完,它就会被删除。还有其他我应该知道的情况吗?谢谢 最佳答案 在C++中有一个非常简单的经验法则:所有内存在超出范围时都会自动释放,除非手动分配。手动分配:由new()分配的任何对象必须由匹配的delete()

c++ - 为什么这个C++程序会导致内存泄漏?

考虑以下代码:char*str1=newchar[30];char*str2=newchar[40];strcpy(str1,"Memoryleak");str2=str1;delete[]str2;delete[]str1;为什么上面的程序会导致内存泄漏?我该如何避免这种情况? 最佳答案 以上不仅会导致内存泄漏,还会导致内存泄漏。它会导致未定义的行为,这要糟糕得多。问题出在最后三行:str2=str1;delete[]str2;delete[]str1;如果我们忽略第一行,那么最后两行会正确回收此函数中分配的所有内存。但是,第一行

c++ - malloc 多个小时间或几个大时间更快?

当使用malloc分配内存时,对较小的数据block进行多次malloc还是对较大的数据block进行较少的malloc通常更快?例如,假设您正在处理一个包含黑色像素和白色像素的图像文件。您正在遍历像素并希望将每个黑色像素的x和y位置保存在一个新结构中,该结构还具有指向下一个和上一个像素x和y值的指针。使用指针为每个黑色像素的x和y值分配一个新结构来遍历像素通常会更快,还是通过遍历一次来计算黑色像素的数量,然后分配一个大的使用仅包含x和y值但不包含指针的结构的内存块,然后再次迭代,将x和y值保存到该数组中?我假设某些平台在哪个更快方面可能与其他平台不同,但每个人都认为什么通常会更快?