簡體   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