繁体   English   中英

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

[英]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

我在这里看不到什么问题。

  1. 未提供size

在主要功能上。 您声明了大小变量,但从未赋予它任何价值。 假设您需要分配25个元素。 用于

int size=25;
  1. 访问超出范围的内容。

    engdic [size] = temp;

假设engdic分配给25个元素,其索引从0开始并以24结尾(engdic [0]至engdic [24]),但是,在上述语句大小未初始化的情况下,它可能访问的数目超过24,从而导致分段错误。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM