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