Проект работает на Windows 7, но не на Linux с Virtual Box

У меня проблема с проектом C ++, который я сделал в Windows 7 с использованием кодовых блоков. Там он прекрасно компилируется и выполняет программу по своему усмотрению, однако, когда я попытался открыть ее с помощью Virtual Box с помощью Linux Mint Cinnamon 17, программа компилируется, но выдает ошибку ошибки сегментации во время выполнения (точнее, «процесс ошибки сегментации возвратил 139 0x8b». Я дал Виртуальная машина 2 ГБ ОЗУ. Вот код, который приводит к остановке программы.

string Tabla::linea(contenedor& lista, int lis_s)
{     //contenedor is: vector < vector <string> >
ostringstream os;
os<<"|";
for(int i=0; i< lista.size();i++)
{   int espacios =maximos[i]-lista[i][lis_s].size();
if(lista[i][0]=="<")
{
os<<" "<<lista[i][lis_s]<<string(espacios,' ')<<" ";
}
if(lista[i][0]==">")
{
os<<" "<<string(espacios,' ')<<lista[i][lis_s]<<" ";
}
if(lista[i][0]=="=")
{
os<<" "<<string( espacios / 2,' ')<<
lista[i][lis_s]<<string(espacios / 2,' ')<<" ";

if(espacios%2==1)
os << " ";
}os<<"|";
}

return os.str();
}

Большое спасибо.

-1

Решение

Это называется «неопределенным поведением», когда ваш код делает что-то, чего он не должен делать, например, читает или записывает элемент с привязкой из вектора, записывает в буфер, который не может содержать столько данных, сколько вы пытаетесь записать. к этому и т. д.

Это может привести к различным непредсказуемым последствиям, таким как ошибка сегментации, переполнение стека, перезапись памяти, и даже может выполнить свою задачу без видимых инцидентов.

Этот конкретный фрагмент кода может вызывать неопределенное поведение во многих ситуациях:

Если maximos.size() меньше чем lista.size() его неопределенное поведение при расчете espacios,

Если lista[i].size() меньше чем lis_s+1 он будет вызывать неопределенное поведение в каждом месте вашего кода, который ссылается на lis_s,

Если lista[i].size() меньше чем 1 его неопределенное поведение на линии if(lista[i][0]=="="),

По сути, вы должны убедиться, что каждый элемент из этих векторов, к которым вы хотите получить доступ, существует, прежде чем обрабатывать их. Вы можете сделать это, проверив все размеры или удостоверившись, что настроили все правильно при заполнении этих векторов информацией.

1

Другие решения


По вопросам рекламы [email protected]