一般出现这个问题,直接debug调试,debug之后IDE会停留在对应的语句上,然后检查这个代码语句对应的指针是否指向了空地址或者是溢出的地址(即改地址不能被访问),如下图
这种情况一般就两种解决方式:
1.首先肯定是逐步debug检查你的代码,确保出现错误的地方的指针没有指向溢出的地址,即没有出现地址越界。
2.一般出现这种错误,都是你的指针出现了问题。但还有一种情况是,这个代码你之前能够正常运行,但是你在没有动过原先代码的基础上,添加了其他代码,之后就不能运行了。那么这种情况也是地址或内存越界或损坏引起的,推进以下解决方法:
一、在报错的代码之前加入其他无关语句
如图,在上方加入int a = 0;这种方法治标不治本,也不一定有用;主要原因是这个语句占用了一定到的内存空间,是内存空间发生偏移,刚好可能就解决了你的问题。
二、重新编译项目
在终端重新make一下项目也可能解决。
三、根本的方式,推荐使用valgrind工具来检测内存
如上图,我的项目的可执行文件是ssd,直接使用命令 sudo valgrind ./ssd就可以,当然,前提是的安装了valgrind。之后valgrind会给出详细的内存使用信息,包括,哪些地方越界访问,哪些地方变量或指针未初始化等等,如果看不懂或懒得看,可以直接复制输出信息给GPT,如上图,然后对应的错误信息一个个修改检查就行。