缓冲区溢出的问题?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了缓冲区溢出的问题?相关的知识,希望对你有一定的参考价值。
程序如下:
#define N 2
#include <iostream>
using namespace std;
class Student
public:
Student(void);
~Student(void);
int GetNum() return num;
void SetScore();
void PrintScore();
private:
int num;
float score[5];
;
Student::Student(void)
Student::~Student(void)
void Student::SetScore()
for(int i=0;i<5;i++)
cin>>score[i];
void Student::PrintScore()
for(int i=0;i<5;i++)
cout<<score[i]<<'\t';
cout<<endl;
int main()
Student student[N];
int i,j;
char course[5][10];
cout<<"请输入课程名称:";
for(j=0;j<5;j++)
cin>>course[j];
for(i=1;i<=N;i++)
cout<<"请输入第"<<i<<"位学生的成绩:"<<endl;
student[i].SetScore();
cout<<"==========学生成绩表==========="<<endl;
for(j=0;j<5;j++)
cout<<course[j]<<'\t';
cout<<endl;
for(i=1;i<=N;i++)
student[i].PrintScore();
return 0;
在输入了5门课程以及2位学生的各科成绩后,按Enter后出现Windows出错和关闭信息。用调试运行,显示错误:在已损坏了程序内部状态的 StudentScore.exe 中发生了缓冲区溢出。按“中断”以调试程序,或按“继续”以终止程序。
请问这是什么原因?
for(i=1;i<=N;i++)
cout<<"请输入第"<<i<<"位学生的成绩:"<<endl;
student[i].SetScore();
里i是从1开始算得就会出现student[2],当然会溢出了.本回答被提问者采纳 参考技术B N=2,Student
student[N],这时只有student[0]和student[1]两个数组元素,而
for(i=1;i<=N;i++)
cout<<"请输入第"<<i<<"位学生的成绩:"<<endl;
student[i].SetScore();
里i是从1开始算得就会出现student[2],当然会溢出了.
堆栈缓冲区溢出会导致堆损坏吗?
【中文标题】堆栈缓冲区溢出会导致堆损坏吗?【英文标题】:Can stack buffer overflows cause heap corruption? 【发布时间】:2014-03-29 18:48:00 【问题描述】:堆栈缓冲区溢出是否可能导致堆损坏问题而不会溢出返回地址?如果有,你能举个例子吗?
【问题讨论】:
哪种语言?哪个平台? 【参考方案1】:是否会导致堆损坏很大程度上取决于平台。
但是,例如,缓冲区溢出会覆盖指针变量,以便它获得一个恰好是不同但有效指针的新值。如果代码然后继续释放所述指针(不知道它现在是别的东西),那么引用该指针的代码可能会崩溃或行为异常,因为内存已被过早释放并可能重新分配用于不同的目的。
【讨论】:
很好的答案!谢谢! 我见过这样的情况,当this
指针从保留调用的寄存器溢出到堆栈,然后堆栈被覆盖。以上是关于缓冲区溢出的问题?的主要内容,如果未能解决你的问题,请参考以下文章