C++ 识别指针处理方式中的错误
这个问题需要我识别指针处理方式中的错误。 我试着编译它,但它没有给出任何错误C++ 识别指针处理方式中的错误,c++,pointers,C++,Pointers,这个问题需要我识别指针处理方式中的错误。 我试着编译它,但它没有给出任何错误 #include <iostream> using namespace std; int main() { int *ptr = new int; int *ptr2 = ptr; delete ptr; ptr = NULL; return 0; } #包括 使用名称空间std; int main() { int*ptr=新的int; int*ptr2=ptr; 删除ptr; ptr
#include <iostream>
using namespace std;
int main()
{
int *ptr = new int;
int *ptr2 = ptr;
delete ptr;
ptr = NULL;
return 0;
}
#包括
使用名称空间std;
int main()
{
int*ptr=新的int;
int*ptr2=ptr;
删除ptr;
ptr=NULL;
返回0;
}
如果您将代码放入main
方法中并编译它valgrid
不会给您任何错误。你在找什么
valgrind—泄漏检查=完全。/a.out
==22277==Memcheck,内存错误检测器
==22277==2002-2013年版权(C)和GNU GPL'd,朱利安·苏厄德等人
==22277==使用Valgrind-3.9.0和LibVEX;使用-h重新运行以获取版权信息
==22277==命令:./a.out
==22277==
==22277==
==22277==堆摘要:
==22277==在出口处使用:0块中的0字节
==22277==总堆使用率:1个allocs,1个free,分配了4个字节
==22277==
==22277==所有堆块都已释放--不可能存在泄漏
==22277==
==22277==对于检测到的和抑制的错误计数,请使用:-v重新运行
==22277==错误摘要:0个上下文中的0个错误(已抑制:6中的8个)
我猜您错过了“int main()”行
#包括
使用名称空间std;
int main()
{
int*ptr=新的int;
int*ptr2=ptr;
删除ptr;
ptr=NULL;
返回0;
}
为什么您希望显示的代码会出错?你认为会出现什么样的错误?为什么你认为这不应该编译?如果要避免使用指向已删除内存的指针,则应使用智能指针。此代码错误且无法编译。你是如何编译的?你的平台是什么?您使用哪种IDE?你使用哪种编译器?您认为此代码有什么问题?@alifadulrahman它不会给您错误,因为在提供的代码中没有要报告的错误。如果在删除后使用ptr2
,则会出现问题。由于未使用ptr2
,因此代码没有问题。它不会给出错误,因为新闻数==删除数。但是如果您尝试使用其中一个指针,特别是已分配但未被置空的指针。。。。
#include <iostream>
using namespace std;
int main()
{
int *ptr = new int;
int *ptr2 = ptr;
delete ptr;
ptr = NULL;
return 0;
}