0

这是我以前从未见过的奇怪错误,不知道如何解决。崩溃发生在

na = m

这是相关的代码。有问题的行标有 *:

在主要:

#include <cstdlib>
#include <iostream>
#include "stu.h"
#include <string>
#include <iomanip>

using namespace std;

int main(int argc, char *argv[])
{   
    stu stu;
    int score[2];

    std::string name;
    std::cout <<"enter name:";
    std::cin >> name;
     //THIS IS AN EDIT IN  AFTER SEEING THAT A IMPORTANT ERROR POINT WAS NOT SHOWN TO THE FIRST COUPLE REPLY 
       ************************************************************
     //THIS IS CAUSING THE PROBLEM WHEN I COMMENT IT OUT THE PROGRAM WORKS 
     std::cout << "enter score 1:";
     std::cin >> score[0];
     std::cout << "enter score 2:";
     std::cin >> score[2];
     std::cout << "enter score 3:";
     std::cin >> score[3];
      *************************************************************
    stu.setname( name );

    // ...
}

stu.ccp

void stu::setname(std::string m)
{
    std::cout <<"1";//<--to find where the code was crashing 

    na = m; // *** the crash

    std::cout <<"1";
}

stu.hpp

class stu
#include <string>
{
public:
    stu();
    void setname(std::string);
    std::string getname();
    void settest(int, int,int);
    void display();

private:
    std::string na;

    int score[2];   
};
4

4 回答 4

1

您为数组中的两个整数分配了足够的空间,具有有效的索引01.

 int score[2];

然后你试图阅读更多的元素

 std::cin >> score[2];
 std::cout << "enter score 3:";
 std::cin >> score[3];

这是未定义的行为,任何事情都可以发生,包括您的整个计算机在火球中消失。在您的情况下,它覆盖了数组旁边的内存,这是您的string变量。制作损坏字符串的副本很容易使程序崩溃。

于 2013-10-24T20:00:48.417 回答
1

当您定义时,int score[2]您会得到一个 2 的数组,int有效的数组索引是0..1.

您后面的代码写入数组末尾并丢弃内存中跟随它的任何内容,在本例中为字符串 object name

std::cout << "enter score 1:";
std::cin >> score[0];
std::cout << "enter score 2:";
std::cin >> score[2];
std::cout << "enter score 3:";
std::cin >> score[3];

最后两个数组引用不正确。

于 2013-10-24T19:59:49.500 回答
0
int score [2]

将只有 score[0] 和 score [1] 点的值。使用尝试

   int score[3]

然后将您的值存储在

 score[0];
 score[1];
 score[2];
于 2013-10-24T20:04:11.950 回答
0

我试过你的代码,它可以编译并且运行也没有问题。

除了您提供的内容外,我刚刚还定义了构造函数,#include <string>之前class stu移入stu.h并删除了std::cout << "1".

于 2013-10-24T19:05:35.923 回答