01/10/2018, 00:22
Sửa lỗi Segmentation fault(core dumped) trên c++ linux
Ai giúp mình sửa lỗi "Segmentation fault(core dumped) " với:
Mình viết hàm thêm từ vào 1 file text. Nếu từ này tồn tại trong file text thì bắt nhập lại. Ngược lại, nếu từ này không tồn tại thì sẽ nhập từ tiếp theo. Nhưng trước khi nhập từ tiếp theo thì lỗi "Segmentation fault(core dumped) không biết tại sao?
Code:
struct Add_Words
{
string word_to_add;
string type_word;
string mean_of_word;
};
//Hàm tìm từ đã có trong file text.
int findWord(string buffer, string word)
{
int isFound = 0;
for(int i = 0; i < word.size(); i++)
{
if(buffer[i] == word[i])
isFound = 1;
}
return isFound;
}
//Hàm thêm từ vào file text.
void AddWordToDict(string FileName, Add_Words *a)
{
string buffer, tmp;
int n;
fstream DATA;
DATA.open(FileName.c_str(), ios::in | ios::app);
cout << "Nhap so luong tu: ";
cin >> n;
while(!DATA.eof())
{
getline(DATA,buffer);
for(int i = 0; i < n; i++)
{
cout << " Tu thu " << i + 1 << endl;
__fpurge(stdin);
do
{
cout << "Tu moi: ";
getline(cin,a[i].word_to_add);
tmp = a[i].word_to_add;
if(findWord(buffer,tmp) == 1)
cout << "Vui long nhap lai." << endl;
else
{
cout << "Loai tu: ";
cin >> a[i].type_word;
__fpurge(stdin);
cout << "Nghia cua tu "" << a[i].word_to_add << """ << ": ";
getline(cin,a[i].mean_of_word);
}
}while(findWord(buffer,tmp) == 1);
}
}
}
MÌnh viết trên C++ Linux nhé.
Bài liên quan
Mình thấy bạn dùng hơi nhiều
findWord()
, với 1 dictionary lớn thì nó sẽ làm giảm hiệu suất.Hàm
findWord
hơi ngộ, bạn có thể dùng! buffer.compare(word)
. Mà có thể hàm main của bạn không cấp phát đủ bộ nhớ cho nó không chừng. Bạn có sử dụng đúng cấp phát động và con trỏ đúng cách hay chưa?Cảm ơn bạn! Mình sửa được rồi.