Ответ 1
while (i<=112){i++;spc[i][1]="n";i++;};i=0;
Вы определили spc как:
string spc[46][3]
Сегодня я впервые использовал С++. Я обычно программист на питоне. Я продолжаю получать segfaults, и я выделил его в комментариях. (те, которые прокомментированы, вызывают 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] =
{{"", "", ""},
...
{"", "", ""}};
Edit: Спасибо. Это всегда глупые вещи, которые я скучаю, и трачу час, чтобы найти. Все, что мне было нужно, это кто-то другой, чтобы указать на это.
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]
.