我有段错误!

时间:2011-03-20 05:59:18

标签: c++ segmentation-fault

今天是我第一次使用c ++。我通常是一个python程序员。 我一直在收到段错误,我已将它隔离到注释行。 (被注释的那些在取消注释时会导致段错误。)

#include <iostream>
#include <fstream>
#include <string>
using namespace std;
#include "defaultfile.h"

int main()
{
    ifstream mapin;
    string map;
    string s;
    int i = 0;
    while (i<=22){i++;top[i][0]="__";i++;};i=0;
    while (i<=21){i++;frw[i][0]="/";i++;};i=0;
    while (i<=21){i++;bck[i][0]="\\";i++;};i=0;
    //while (i<=45){i++;spc[i][0]=" ";i++;};i=0;
    //while (i<=112){i++;spc[i][1]="n";i++;};i=0;
    while (i<=22){i++;cout<<top[i][1]<<endl;i++;};i=0;
    while (i<=21){i++;cout<<frw[i][1]<<endl;i++;};i=0;
    while (i<=21){i++;cout<<bck[i][1]<<endl;i++;};i=0;
    //while (i<=45){i++;cout<<spc[i][1]<<endl;i++;};i=0;
    ...
}

标题是:

string top[23][3] = 
{{"", "", ""},
...
{"", "", ""}};
string frw[22][3] = 
{{"", "", ""},
...
{"", "", ""}};
string bck[22][3] = 
{{"", "", ""},
...
{"", "", ""}};
string spc[46][3] = 
{{"", "", ""},
...
{"", "", ""}};

修改 谢谢。这总是我想念的蠢事,花了一个小时试图找到。我所需要的只是其他人指出来的。

4 个答案:

答案 0 :(得分:2)

while (i<=112){i++;spc[i][1]="n";i++;};i=0;

您将spc定义为:

string spc[46][3]

答案 1 :(得分:1)

您将spc一直索引到112,但只有0-45对第一个索引有效。

答案 2 :(得分:1)

数组基于0。你在每一个上面都在写。它在spc上崩溃了,因为它是最后一个。在其他的那些你写入下一个的记忆。

澄清:你做while (i <= 45) { i++; spc[i] ...现在如果我是45,那么你将它增加到46并且你访问超出界限的spc[46]。所有其他行也一样。

此外,您只会初始化每个第二个字段 - 不确定这是否是故意的。

答案 3 :(得分:0)

//while (i<=112){i++;spc[i][1]="n";i++;};i=0;

这肯定会在spc[46]上发生段错误。