[英]Segmentation fault: 11 (C++ File input and output, classes and dynamic arrays)
我正在开发一个程序,该程序应该读取文件,将其内容作为输入并将其写入动态数组。 每当我执行程序以输出(打印出)应该作为输入的单词时,都会出现“ segmentation fault:11”。 该程序的概念是读取一个包含英语单词的文件,以及其西班牙语翻译和打印输出。 原始代码较大,但是我仅包含文件I / O和动态数组,它们是触发segfault的代码。 感谢您对为什么发生这种情况以及可能的解决方法提供了任何帮助。
我的代码:
#include <iostream>
#include <cstdlib>
#include <fstream>
#include <string>
#include <algorithm>
#include <cctype>
using namespace std;
class diccionario {
public:
void abrir_file (ifstream& entrada, ofstream& salida);
diccionario();
~diccionario();
void escribir(ofstream& salida);
void validar();
private:
string *espdic;
string *engdic;
int size;
};
diccionario::diccionario () : cantidad(0), size(10) {
string *espdic = new string [size];
string *engdic = new string [size];
}
diccionario::~diccionario () {
}
void abrir_file (ifstream& entrada, ofstream& salida) {
entrada.open ("palabras.txt");
if(entrada.fail())
{
cout << "Error abriendo archivo" << endl;
salida << "Error abriendo archivo" << endl;
exit(1);
}
salida.open ("salida.txt");
if(salida.fail())
{
cout << "Error abriendo archivo" << endl;
salida << "Error abriendo archivo" << endl;
exit(1);
}
}
int main() {
int opcion, size;
ifstream entrada;
ofstream salida;
string temp;
diccionario english;
string *espdic = new string [size];
string *engdic = new string [size];
abrir_file (entrada, salida);
if(entrada.is_open()) {
while(entrada >> temp) {
engdic[size] = temp;
size++;
}
}
do {
menu(salida);
cin >> opcion;
switch (opcion) {
case 1:
english.escribir(salida);
break;
case 2:
cout << "Fin de programa" << endl;
salida << "Fin de programa" << endl;
exit(1);
}
} while (opcion != 0);
salida.close();
entrada.close();
return 0;
}
输入文件(palabras.txt):
God Dios
Violet Violeta
Ray Rayo
Master Maestro
Power Poder
我在这里看不到什么问题。
size
。 在主要功能上。 您声明了大小变量,但从未赋予它任何价值。 假设您需要分配25个元素。 用于
int size=25;
访问超出范围的内容。
engdic [size] = temp;
假设engdic分配给25个元素,其索引从0开始并以24结尾(engdic [0]至engdic [24]),但是,在上述语句大小未初始化的情况下,它可能访问的数目超过24,从而导致分段错误。
while
循环之前while
size
未初始化为零。 在下面的代码中,size的开始和结束值是什么? 理想情况下,您应该以0开头并以最大容量结尾(此处为24)
while(entrada >> temp){engdic [size] = temp; 大小++; }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.