从讨论开始here ,我想知道下面的代码是否有内存泄漏:
int main()
{
new int();
//or
int* x = new int();
return 0;
}
我知道内存被操作系统回收了,但它还是泄漏了吗?我相信是的。
什么定义了内存泄漏?我只能在标准中找到一份引用资料,而且帮助不大。
编辑:我不想开始辩论——“我认为……”不是我要找的那种答案。我最感兴趣的是资源 - 哪些 C++ 书籍或网站或任何关于它的内容。
最佳答案
这取决于你如何定义“泄漏”。根据最明显的 定义,唯一有用的,它不是泄漏,至少在 应用层。水桶不漏是因为你有意 让有限数量的水逸出。实际上, 应用程序不会因为您有意允许绑定(bind)集而失败 在程序结束后持续存在的对象。
关于内存泄漏,我们对这个词的认知一直是 由“泄漏检查器”(如 Purify 或 Valgrind 等程序)着色。他们的 作用是发现泄漏(除其他外),但他们没有办法 知道什么是有意的,什么不是,什么是受约束的,什么 不是。所以他们发明了其他定义:一个无法到达的对象 已经“泄漏”(并且在实际代码中很有可能 真),或者在所有的之后还没有被删除的对象 已执行的静态对象的析构函数已“泄漏”。在 后一种情况,定义显然是错误的,有点像 无用。但是有足够多的情况表明这些东西是泄漏的 至少警告他们是合理的(“可能的泄漏”),前提是 有一种方法可以过滤掉特定的案例。 (净化和 Valgrind 认识到并非所有这些情况都是真正的泄漏,并且 为它们的检测提供各种过滤机制。)所有这些 非常好——我很高兴我们有这样的工具——但是 我们不应该让他们歪曲语言。
最后提醒一下:标准说标准 iostream
对象(std::cout 等)永远不会被破坏。所以任何缓冲区
他们分配的将(可能)永远不会被释放。他们中肯定没有人
正确的想法会考虑这些“泄漏”。
关于c++ - 在动态分配的对象上调用 delete 是否总是内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9921590/
总的来说,我对ruby还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用
作为我的Rails应用程序的一部分,我编写了一个小导入程序,它从我们的LDAP系统中吸取数据并将其塞入一个用户表中。不幸的是,与LDAP相关的代码在遍历我们的32K用户时泄漏了大量内存,我一直无法弄清楚如何解决这个问题。这个问题似乎在某种程度上与LDAP库有关,因为当我删除对LDAP内容的调用时,内存使用情况会很好地稳定下来。此外,不断增加的对象是Net::BER::BerIdentifiedString和Net::BER::BerIdentifiedArray,它们都是LDAP库的一部分。当我运行导入时,内存使用量最终达到超过1GB的峰值。如果问题存在,我需要找到一些方法来更正我的代
给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru
在控制台中反复尝试之后,我想到了这种方法,可以按发生日期对类似activerecord的(Mongoid)对象进行分组。我不确定这是完成此任务的最佳方法,但它确实有效。有没有人有更好的建议,或者这是一个很好的方法?#eventsisanarrayofactiverecord-likeobjectsthatincludeatimeattributeevents.map{|event|#converteventsarrayintoanarrayofhasheswiththedayofthemonthandtheevent{:number=>event.time.day,:event=>ev
我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server
我有一个表单,其中有很多字段取自数组(而不是模型或对象)。我如何验证这些字段的存在?solve_problem_pathdo|f|%>... 最佳答案 创建一个简单的类来包装请求参数并使用ActiveModel::Validations。#definedsomewhere,atthesimplest:require'ostruct'classSolvetrue#youcouldevencheckthesolutionwithavalidatorvalidatedoerrors.add(:base,"WRONG!!!")unlesss
通过rubykoans.com,我在about_array_assignment.rb中遇到了这两段代码你怎么知道第一个是非并行赋值,第二个是一个变量的并行赋值?在我看来,除了命名差异之外,代码几乎完全相同。4deftest_non_parallel_assignment5names=["John","Smith"]6assert_equal["John","Smith"],names7end45deftest_parallel_assignment_with_one_variable46first_name,=["John","Smith"]47assert_equal'John
好的,所以我的目标是轻松地将一些数据保存到磁盘以备后用。您如何简单地写入然后读取一个对象?所以如果我有一个简单的类classCattr_accessor:a,:bdefinitialize(a,b)@a,@b=a,bendend所以如果我从中非常快地制作一个objobj=C.new("foo","bar")#justgaveitsomerandomvalues然后我可以把它变成一个kindaidstring=obj.to_s#whichreturns""我终于可以将此字符串打印到文件或其他内容中。我的问题是,我该如何再次将这个id变回一个对象?我知道我可以自己挑选信息并制作一个接受该信
这个问题在这里已经有了答案:Checktoseeifanarrayisalreadysorted?(8个答案)关闭9年前。我只是想知道是否有办法检查数组是否在增加?这是我的解决方案,但我正在寻找更漂亮的方法:n=-1@arr.flatten.each{|e|returnfalseife
如果您尝试在Ruby中的nil对象上调用方法,则会出现NoMethodError异常并显示消息:"undefinedmethod‘...’fornil:NilClass"然而,有一个tryRails中的方法,如果它被发送到一个nil对象,它只返回nil:require'rubygems'require'active_support/all'nil.try(:nonexisting_method)#noNoMethodErrorexceptionanymore那么try如何在内部工作以防止该异常? 最佳答案 像Ruby中的所有其他对象