草庐IT

link-delete

全部标签

C++: LINK : debug\XXXXX.exe not found 或不是由最后一个增量链接构建的;执行完整链接

使用VisualStudio2008SP1,这一行:LINK:debug\XXXXX.exenotfoundornotbuiltbythelastincrementallink;performingfulllink每次编译项目时都会出现,无论我做了多么小的更改。这可能是什么原因? 最佳答案 老问题,但以防万一它仍然是一个问题(而且它是..)。增量链接与生成list文件不兼容(项目选择>链接器>list文件>生成list:是)。实际上,生成list会修改exe/dll,因此链接器必须进行完全链接。有一些解决方法,有关更多详细信息:ht

c++ - 使 : implicit rule to link c++ project

我正在学习制作教程。我正在尝试构建的非常简单的测试项目只有3个文件:./src/main.cpp./src/implementation.cpp和./include/header.hpp这是制作文件。VPATH=srcincludeCPPFLAGS=-Iincludemain:main.oimplementation.omain.o:header.hppimplementation.o:header.hpp在不带任何参数的情况下调用ma​​ke仅构建目标文件,但不链接可执行文件。prog应该有一个隐含的规则,或者我错过了什么?我真的需要有人为我指明正确的方向。谢谢。我使第一个目标名称与

c++ - 调用析构函数或调用 `delete` 时是否释放内存?

假设你有一个classFool的对象。classFool{inta,b,c;double*array;//...~Fool(){//destroysthearray..delete[]array;}};Fool*fool=newFool();现在,Iknowyoushouldn't,但是有些傻瓜无论如何都会在fool上调用析构函数。傻瓜->~Fool();.这是否意味着fool的内存已被释放,(即a、b、c无效)或是否仅表示~Fool中的任何释放()函数发生(即只删除数组?)所以我想我的问题是,析构函数只是另一个函数,它在对象上调用delete时被调用,还是做更多的事情?

C++ Visual Studio : linking using pragma comment

我遇到了一段使用#pragmacomment(lib,"libraryname")的代码。为什么要使用这种类型的用法,而不是仅从属性菜单链接库?在什么情况下需要这种用法?我在Windows中使用C++Visual Studio 2010.很高兴看到一个需要这种用法的示例。 最佳答案 库编写者可以在公共(public)头文件(.h)中放置#pragmacomment(lib,...)命令。在这种情况下,客户端不需要将此库添加到链接器依赖项列表中。通过在程序中包含一个h文件,客户端会自动链接到所需的库。

c++ - 对于 C++ 中的指针,delete 命令真正对内存有什么作用?

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:C++delete-ItdeletesmyobjectsbutIcanstillaccessthedata?Canalocalvariable'smemorybeaccessedoutsideitsscope?当我想释放用new分配的内存时,我不明白delete究竟做了什么。在C++Premiere书中写道:Thisremovesthememorytowhichpspointerpoints;itdoesn’tremovethepointerpsitself.Youcanreuseps,forexample,

c++ - C++ 标准中与 [basic.link]/7 相关的 GCC 和 clang 之间的矛盾结果

这段代码在clang中编译,namespaceA{voidf(){voidg();g();}}voidA::g(){}但如果g在命名空间A中定义如下,GCC只接受代码:namespaceA{voidf(){voidg();g();}voidg(){}}但我相信[basic.link]/7中没有任何内容不允许上面的第一个片段。 最佳答案 [basic.link]/p7,强调我的:Whenablockscopedeclarationofanentitywithlinkageisnotfoundtorefertosomeotherdecl

c++ - 将运算符 new[] 和放置 new 与普通 delete[] 混合

出于好奇,以下是否合法?X*p=static_cast(operatornew[](3*sizeof(X)));new(p+0)X();new(p+1)X();new(p+2)X();delete[]p;//AmIallowedtousedelete[]here?Orisitundefinedbehavior?同样:X*q=newX[3]();(q+2)->~X();(q+1)->~X();(q+0)->~X();operatordelete[](q); 最佳答案 我很确定两者都给UB。§5.3.4/12说新表达式的数组形式可能会给

c++ - 如何使用 link.exe 进行静态链接

我一直在尝试静态链接一个名为Poco的C++库。在Windows上使用VisualStudio2008命令行工具。我构建我的程序:cl/I..\poco\lib/cmyapp.cpplink/libpath:..\poco\libmyapp.objPocoNet.lib这会导致运行时需要PocoNet.dll和PocoFoundation.dll的exe。我花了一些时间阅读Windows中的链接,并了解到cl/MT静态链接到标准库,而cl/MD链接动态。我尝试指定/MT,但这似乎并没有改变任何东西;我的应用程序仍然需要PocoDLL。(我也怀疑/MT是默认行为。)查看..\poco\l

c++ - delete[] 具有不同类型的未定义行为?

我想知道这是否是未定义的行为:#includeintmain(){auto*p=newuint8_t[32];float*c=reinterpret_cast(p);delete[]c;}在standard有Ifnot,thebehaviorisundefined.Inthesecondalternative(deletearray),thevalueoftheoperandofdeletemaybeanullpointervalueorapointervaluethatresultedfromapreviousarraynew-expression.79Ifnot,thebehavi

c++ - 'delete' 的数组形式是什么?

当我使用数组名作为指针编译代码,并使用delete删除了数组名时,我收到了关于不使用数组形式删除数组的警告(我不记住确切的措辞)。基本代码是:intdata[5];deletedata;那么,delete的数组形式是什么? 最佳答案 delete的数组形式为:delete[]data;编辑:但正如其他人指出的那样,您不应该为这样定义的数据调用delete:intdata[5];您应该只在使用new分配内存时调用它,如下所示:int*data=newint[5]; 关于c++-'delet