Sửa lỗi Segmentation fault (core dumped) trên c++

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 << "\t\t\tTu 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é.

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?

1 Like

Cảm ơn bạn! Mình sửa được rồi. :slight_smile:

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?