У меня есть segfaults!

Сегодня я впервые использую с ++ за некоторое время. Я обычно программист на Python. Я продолжаю получать segfaults, и я изолировал это к комментариям. (те, что комментируются, вызывают ошибки при отсутствии комментариев.)

#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 ответа

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

Вы определили spc как:

string spc[46][3]

Вы индексируете spc вплоть до 112, но только 0-45 действительны для первого индекса.

Массивы основаны на 0. Вы пишете через конец на каждом из них. Он упал на SPC, потому что это последний. На других вы пишете в память о следующем.

Чтобы уточнить: вы делаете while (i <= 45) { i++; spc[i] ... Теперь, если мне 45, вы увеличиваете его до 46, и вы получаете доступ spc[46] который находится за пределами. То же самое для всех остальных линий.

Кроме того, вы инициализируете только каждое второе поле - не уверены, является ли оно намеренным.

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

Это будет segfault на spc[46] наверняка.

Другие вопросы по тегам