Code C++ bị Segmentation fault

Mọi người cho em hỏi lỗi Segmentation fault là bị sao ạ. Em cảm ơn

#include <iostream>
using namespace std;
struct date
{
    int d;
    int m;
    int y;
};
int ng[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int Nhuan (int nam)
{
    return (((nam%4==0)&&(nam%100!=0))||(nam%400==0))?1:0;
}
int Sngay (int thang, int nam)
{
    return (ng[thang]+(((thang==2)&&(Nhuan(nam)==1))?1:0));
}
long int tngay (date ngtn)
{
    long int tong=0, i;
    for (i=1;i< ngtn.y;i++) tong +=365+Nhuan(i);
    for (i=1;i<ngtn.m;i++) tong+=Sngay(i,ngtn.y);
    for (i=1;i<ngtn.d;i++) tong++;
    return tong;
}
long int khcach (date ngtn1, date ngtn2)
{
    return (tngay(ngtn2)-tngay(ngtn1));
}
void thu (date x)
{
    date today ={21,8,2021};
    int du=abs(khcach(today,x)%7);
    switch (du)
    {
    case 0:
    cout<<"thu bay";break;
    case 1:
    cout<<"chu nhat";break;
    case 2:
    cout<<"thu hai";break;
    case 3:
    cout<<"thu ba";break;
    case 4:
    cout<<";thu tu";break;
    case 5:
    cout<<"thu nam";break;
    case 6:
    cout<<"thu sau";break;
    }
}
void nhapct (date n)
{
    cout<<"nhap ngay : "; cin>>n.d;
    cout<<"nhap thang : "; cin>>n.m;
    cout<<"nhap nam : "; cin>>n.y;
}
int main()
{
   date n1,n2;
   cout<<"nhap ngay thu 1 : "<<endl; nhapct(n1);
   cout<<"nhap ngay thu 2 : "<<endl; nhapct(n2);
   cout<<"khoang cach giua hai ngay : "<<khcach(n1,n2)<<" ngay"<<endl;
   cout<<"thu cua ngay 1 : "; thu(n1);
   cout<<endl;
   cout<<"thu cua ngay 2 : "; thu(n2);
   cout<<endl;
   system ("pause");
   return 0;
}

hàm void nhapct(date n) thay đổi giá trị của date n thì phải truyền tham chiếu date& n nha :V

nếu ko xài tham chiếu thì date n1, n2 trong main() sau khi gọi nhapct(n1)nhapct(n2) ko thay đổi giá trị, chứa giá trị rác ban đầu, dẫn tới đôi lúc n1.m hoặc n2.m chứa giá trị > 12 hay < 0, nên truy cập ng[thang] ko nằm trong 13 phần tử của ng nên nó seg fault :V

5 Likes

em cảm ơn bác nhé :smile:

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