分段错误:11(C++ 文件输入和输出,类 和动态数组)

Segmentation fault: 11 (C++ File input and output, classes and dynamic arrays)

我正在开发一个程序,该程序应读取文件,将其内容作为输入并将其写入动态数组。每次我执行程序输出(打印输出)应该作为输入的单词时,我得到一个 "segmentation fault:11"。该程序的概念是读取一个文件,该文件包含一个英文单词及其西班牙语翻译和打印输出。原始代码更大,但我只包含了文件 I/O 和触发段错误的动态数组。任何关于为什么会发生这种情况的帮助和可能的修复表示赞赏。

我的代码:

#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

我发现这里没有什么问题。

  1. size 未提供。

在主函数中。您声明了 size 变量但从未给它赋值。假设您需要分配 25 个元素。用作

int size=25;
  1. 越界访问。

    engdic[尺寸] = 温度;

假设,engdic 的分配是针对 25 个元素,它的索引从 0 开始,以 24 结束(engdic[0] 到 engdic[24]),但是,在上面的语句大小未初始化的情况下,它可能正在访问更多24,导致分段错误。

  1. sizewhile 循环之前未初始化为零。

在下面的代码中,大小的起始值和结束值是多少?理想情况下,您应该以 0 开始并以最大容量结束(此处为 24)

while(entrada >> temp) { engdic[size] = temp; size++; }