Project在Windows 7上运行,但不在带虚拟机的Linux上运行 我在使用代码块的Windows 7上进行C++项目遇到了问题。在那里,它可以完美地编译并根据需要执行程序。但是,当我尝试使用Linux17使用Virtual Box打开它时,程序进行编译,但在运行时抛出分段错误错误(更具体地说,“分段错误进程返回139 0x8b”.我给了虚拟机2GB的RAM。下面是导致程序停止的代码 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(); } string Tabla::linea(contendor&lista,int lis_s) {//contendor是:vector ostringstream os; 这被称为“未定义行为”,它是指代码执行不应该执行的操作,如从向量中读取或写入一个越界元素,写入一个缓冲区,该缓冲区不能容纳与您试图写入的数据一样多的数据等

Project在Windows 7上运行,但不在带虚拟机的Linux上运行 我在使用代码块的Windows 7上进行C++项目遇到了问题。在那里,它可以完美地编译并根据需要执行程序。但是,当我尝试使用Linux17使用Virtual Box打开它时,程序进行编译,但在运行时抛出分段错误错误(更具体地说,“分段错误进程返回139 0x8b”.我给了虚拟机2GB的RAM。下面是导致程序停止的代码 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(); } string Tabla::linea(contendor&lista,int lis_s) {//contendor是:vector ostringstream os; 这被称为“未定义行为”,它是指代码执行不应该执行的操作,如从向量中读取或写入一个越界元素,写入一个缓冲区,该缓冲区不能容纳与您试图写入的数据一样多的数据等,c++,linux,segmentation-fault,linux-mint,C++,Linux,Segmentation Fault,Linux Mint,它可能会导致各种不可预测的后果,如分段错误、堆栈溢出、内存覆盖,甚至可能在没有意外事件的情况下完成任务 在许多情况下,这段特定的代码可能会调用未定义的行为: 如果maximos.size()小于lista.size()它在计算espacios时的未定义行为 如果lista[i].size()小于lisus+1它将在代码中引用lisus的每个地方调用未定义的行为 如果lista[i].size()小于1它在If(lista[i][0]=“=”=”)行上的未定义行为 基本上,在访问这些向量之前,您必

它可能会导致各种不可预测的后果,如分段错误、堆栈溢出、内存覆盖,甚至可能在没有意外事件的情况下完成任务

在许多情况下,这段特定的代码可能会调用未定义的行为:

如果
maximos.size()
小于
lista.size()
它在计算
espacios
时的未定义行为

如果
lista[i].size()
小于
lisus+1
它将在代码中引用
lisus
的每个地方调用未定义的行为

如果
lista[i].size()
小于
1
它在
If(lista[i][0]=“=”=”)
行上的未定义行为


基本上,在访问这些向量之前,您必须确保这些向量中的每个元素都存在。您可以通过检查所有大小来做到这一点,也可以在使用信息填充这些向量时确保设置正确。

调试器在这种情况下很有帮助。请确保
lista[i].size()>0
在访问
lista[i][…]
之前。Hi@Havenard它是一个向量,包含整数,表示lista的每个子向量上找到的字符串的最大大小,因为它是一个向量向量。