jjzjj

c++ - 我很难修复我认为是双重免费的东西

我正在尝试创建一个链表vector作为类成员。Valgrind显示没有内存泄漏,但也会在程序结束时产生Invalidfree()/delete/delete[]/realloc()错误。我试图通过为链表编写析构函数、复制构造函数和复制赋值运算符来解决这个问题。我相信这些已经正确实现。我还尝试了各种向成员vector添加链表的方法(引用、指针、智能指针),但似乎都无法解决问题。#include"lists.h"lists::lists(){}voidlists::newList(){intsize,value;cout>size;shared_ptrnew_list(newlist);/

c++ - 共享指针双重删除

我有一个对象,尽管它被智能指针跟踪,但显然被双重删除了。我不熟悉使用智能指针,所以我创建了一个简单的函数来测试我是否正确使用了该对象。int*a=newint(2);std::shared_ptrb(a);std::shared_ptrc(a);当指针超出范围时,主函数中的这组代码会导致运行时错误,为什么?智能指针不是应该能够自己处理a的删除吗? 最佳答案 shared_ptr期望拥有指向的对象。您所做的是创建两个独立的智能指针,每个智能指针都认为它拥有底层int的独占所有权。他们不知道彼此的存在,他们不互相交谈。因此,当它们超出范

构成导致不兼容的指针类型。为什么只选择双重指针?

这个问题已经解决这里.建议复制当前给出的答案并没有解决为什么首先给出的示例没有问题。主要为什么不理理由:"constint**isapointertoconstint*这与仅仅是不同的事情int*"也申请:"constint*isapointertoconstint这与仅仅是不同的事情int"我正在从不同的角度接近它,希望得到另一个解释。带有示例的代码。#includevoidf_a(intconsta){/**Can'tdo:*a=3;//error:assignmentofread-onlyparameter‘a’**Explanation:Ican'tchangethevalueofai

c++ - 双重比较 - 数值限制

我无法理解以下代码:doublea=-1000;doubleb=numeric_limits::min();if(a输出是:why?如何-1000低于numeric_limits::min()? 最佳答案 是因为numeric_limits::min();是以doublefloat表示的最小正数,而不是最大负数。 关于c++-双重比较-数值限制,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/ques

c++ - 从 abs(double) 而不是 int 获得双重结果

我需要计算两个double值之差的绝对值,并得到一个double结果。相反,我得到一个int。#include//...printf("a:%sb:%sdelta:%sabs:%s\n",typeid(a).name(),typeid(b).name(),typeid(a-b).name(),typeid(abs(a-b)).name());//Prints:a:db:ddelta:dabs:i如果减法的结果已经是double,为什么abs不使用doubleabs(doublex);签名?事实上,它怎么可能返回一个整数呢?最重要的是,我如何强制它返回一个double?以防万一,a和b实

c++ - 双重标准?为什么只对 char* const& a = "bla"发出警告?

在尝试深入研究thisquestion等案例背后的机制之后暴露了,我仍然不明白为什么下面代码中的第三行只生成警告,而第二行是错误。intmain(){constchar*const&a="bla";//Validcodeconstchar*&a2="bla";//Invalidcodechar*const&a3="bla";//Shouldbeinvalidbutsettlesforawarningreturn0;}我知道虽然引用初始化正在将字符串文字转换为指针引用,但它不应该删除任何cv-qualifiers对象具有,并且由于转换后的类型是constchar*const(从字符串文字

c++ - 避免双重包含 : Preprocessor directive vs. makefile

我正在努力从弗兰肯斯坦和一个文件数千行的程序转变为结构良好、组织良好的多文件程序。现在看起来很自然(天真)的是为我的三个文件制作一个包含标题的三角恋:file_1包括file_2、file_4file_2包括file_3、file_4file_3包括file_1....等等等等这些文件具有我在其他文件之间需要的变量、方法、结构等。当然,我遇到了双重包含错误。我的问题:我应该通过在header中使用预处理器指令(例如,完全在header中包括结构、方法等)来避免这些问题,还是应该使用makefile进行编译(我hear也可以用来解决这个问题---但我从来没有做过)?

c++ - 为什么用逗号进行双重初始化是非法的?

我有三个代码片段。这个:1,7;//yes,that'sallthecode编译正常。这个:doubled=(1,7);也可以编译。然而这个:doubled=1,7;编译失败。gcc-4.3.4说error:expectedunqualified-idbeforenumericconstant和VisualC++10说errorC2059:syntaxerror:'constant'为什么会有这样的差异?为什么不是所有三个都使用编译,在所有三个中具有相同的效果? 最佳答案 在前两种情况下,语句使用C++的commaoperator在

c++ - C++中的for循环提前一步使用双重突破,未达到边界值

我在32位Ubuntu8.04上使用gcc4.2.4编译了一个简单的C++程序。它有一个for循环,其中一个double变量以一定的步长从零递增到1。当步长为0.1时,行为符合我的预期。但是当步长为“0.05”时,循环在0.95后退出。谁能告诉我为什么会这样?输出遵循下面的源代码。#includeusingnamespacestd;intmain(){doublerangeMin=0.0;doublerangeMax=1.0;doublestepSize=0.1;for(doubleindex=rangeMin;index输出sarva@savija-dev:~/code/scratc

c++ - 这是带有 shared_ptr 的正确 C++11 双重检查锁定版本吗?

这articleJeffPreshing指出双重检查锁定模式(DCLP)在C++11中得到修复。用于此模式的经典示例是单例模式,但我碰巧有一个不同的用例,而且我仍然缺乏处理“原子武器”的经验-也许这里有人可以帮助我。Jeff在"UsingC++11SequentiallyConsistentAtomics"下描述的以下代码是否是正确的DCLP实现??classFoo{std::shared_ptrdata;std::mutexmutex;voiddetach(){if(data.use_count()>1){std::lock_guardlock{mutex};if(data.use_