https://blog.csdn.net/e_road_by_u/article/details/61415732
一、段错误是什么
一句话来说,段错误是指访问的内存超出了系统给这个程序所设定的内存空间,例如访问了不存在的内存地址、访问了系统保护的内存地址、访问了只读的内存地址等等情况。
二、段错误产生的原因
1、访问不存在的内存地址
#include
#include
void main()
{
int *ptr = NULL;
*ptr = 0;
}
2、访问系统保护的内存地址
#include
#include
void main()
{
int *ptr = (int *)0;
*ptr = 100;
}
3、访问只读的内存地址
#include
#include
#include
void main()
{
char *ptr = "test";
strcpy(ptr, "TEST");
}
4、栈溢出
#include
#include
void main()
{
main();
}
5、delete使用错误
delete只能删除new得来的内存,上面的p指向了新的内存,原先new来的内存已找不到了,内存泄漏。
上面释放了两次new来的内存。
下面是程序中的一个段错误实例:
上面的段错误是因为越界了。数组的边界没有确定好,此处是循环的数量错了。(还有一次是指针数组忘记分配内存了)
三、内存问题
内存问题始终是c++程序员需要去面对的问题,这也是c++语言的门槛较高的原因之一。通常我们会犯的内存问题大概有以下几种:
1.内存重复释放,出现double free时,通常是由于这种情况所致。
2.内存泄露,分配的内存忘了释放。
3.内存越界使用,使用了不该使用的内存。
4.使用了无效指针。
5.空指针,对一个空指针进行操作。
第四种情况,通常是指操作已释放的对象,如: