您的程序中引发的访问冲突(分段错误)

时间:2013-07-16 18:53:28

标签: c++ exception segmentation-fault

我正在处理USACO页面上的第一个问题,我收到一条错误消息:

Execution error: Your program had this runtime error:
        Exceeded memory or invalid memory reference. The program ran for
        0.000 CPU seconds before the error. It used 3372 KB of memory. 

我很确定我知道为什么会这样:当我运行我的程序时,它编译并执行正常,但是一旦程序完成,弹出一个框说“main.exe已停止工作.. “,然后它冻结了。当我运行调试器时,我收到此错误: an access violation (segmentation fault) raised in your program。这是什么意思,我该如何解决? 我看到了其他几个这样的线程,但我无法使用其他线程的反馈来修复我的程序。这是我的代码:

/*
ID: krishna24
LANG: C++
PROG: ride
*/
#include <cstdlib>
#include <iostream>
#include <string>

using namespace std;

string ride(string comet, string group) {
   int cometsum = 1;
   int groupsum = 1;
   for(int i = 0; i < comet.size(); i++) {
       char ascival = comet[i];
       cometsum = cometsum*((int)ascival-64);
   }
   for(int i = 0; i < group.size(); i++) {
       char ascival = group[i];
       groupsum = groupsum*((int)ascival-64);
   }
   if (groupsum%47 == cometsum%47) cout << "GO";
   else cout << "STAY";
}

int main(int argc, char *argv[])
{
    string comet;
    getline(cin, comet);
    string group;
    getline(cin, group);
    ride(comet, group);
}

非常感谢您的帮助!

PS:关于如何使我的代码更加简化和高效的任何建议也是有用的。 :)

编辑:这不起作用,因为我的ride()函数没有返回字符串。将其更改为void解决了问题。谢谢大家!

2 个答案:

答案 0 :(得分:6)

ride声称返回string,但您实际上并未返回任何内容。我很惊讶编译器让你逃脱了;你应该为GCC启用警告(-Wall)甚至可能使警告成为错误(GCC为-Werror)。

答案 1 :(得分:0)

ride()应该返回一个字符串,而是输出到控制台。也许在ride()的末尾,更改代码以返回字符串:

if (groupsum%47 == cometsum%47) return << "GO";
    else return << "STAY";

并在main()中将结果输出到控制台:

cout << ride(comet, group);