Mình có 1 bài tập viết cấu trúc vehicule ( xe oto) bằng stack trên Linux nhưng chạy bị lỗi Segmentation fault lúc thêm phần tử vào stack
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
typedef struct vehicule{
char nom_modele[20]; // Tên xe
int puissance; // Phân khối của xe ( cai nay gia tri ngau nhien tùy mình muốn)
float vitesse_max; // Tốc độ tối đa (tương tự phân khối)
}vehicule;
typedef struct
{
int nbVehicule;
vehicule **tpv;//tpv là mảng các con trỏ kiểu vehicule
} pilevehicule;
void saisie_vehicule(vehicule *p) //nhap thong tin xe vao
{
printf("Entrew le nom modele : \n");
scanf("%s",p->nom_modele);
srand(time(NULL));
p->puissance=rand()%(301);
p->vitesse_max=rand()%(251);
}
pilevehicule *init_pilevehicule() //tạo stack
{
pilevehicule *p;
p=(pilevehicule *)malloc(sizeof(pilevehicule));
p->nbVehicule=0;
return (p);
}
void empile_vehicule(pilevehicule *p,vehicule *v){
p->tpv[p->nbVehicule]=v;
p->nbVehicule++;
}
void affiche_pilevehicule(pilevehicule *p) //hiển thị các phần tử trong stack ra
{
printf("nb Vehicule: %d \n", p->nbVehicule);
int i;
for(i=0;i <= p->nbVehicule;i++){
vehicule *a;
a= p->tpv[i];
printf("vehicule %i nom modele est: %s \n", i+1, a->nom_modele);
printf("la puissance est %d \n ",a->puissance);
printf("la vitesse max est %f \n ", a->vitesse_max);
}
}
vehicule *depile_vehicule(pilevehicule *p)//lấy phần tử đỉnh ra
{
vehicule *a;
a=(vehicule *)malloc(sizeof(vehicule));
a=p->tpv[p->nbVehicule];
--p->nbVehicule;
return a;
}
void affiche_vehicule(vehicule *v)//hiển thị thuộc tính của xe ra
{
printf("modele de cette vehicule est:%s \n",v->nom_modele);
printf("la puissance est %d \n",v->puissance);
printf("la vitesse max est %f \n ", v->vitesse_max);
}
void supprime_pilevehicule(pilevehicule *p) //giải phóng bộ nhớ
{
free(p);
}
int main(){
vehicule *v1, *v2, *v3;
v1 =(vehicule *)malloc(sizeof(vehicule));
v2 =(vehicule *)malloc(sizeof(vehicule));
saisie_vehicule(v1); //nhập thuộc tính vào
saisie_vehicule(v2); // tương tự nhập thuộc tính vào
pilevehicule *pv;
pv=init_pilevehicule(); //tạo stack
empile_vehicule(pv, v1); //đưa v1 vào stack pv
empile_vehicule(pv, v2);//đưa v2 vào stack pv
affiche_pilevehicule(pv); // sau khi đưa thì hiển thị các phần tử của mảng ra
v3 = depile_vehicule(pv); // lấy phần tử trên cùng của stack, đem ra lưu vào v3
affiche_vehicule(v2); // hiển thị thông tin của xe v2
printf("\n\nPile après suppression\n\n"); // stack sau khi bỏ v2 đi
affiche_pilevehicule(pv); //hiện stack sau khi bỏ v2 đi
supprime_pilevehicule(pv); // giải phóng toàn bộ bộ nhớ của pv
affiche_pilevehicule(pv); //hiển thị ra stack sau khi giải phóng bộ nhớ
return 0;
}
Em bị lỗi chỗ empile_pilevehicule ( đưa vào stack) và depiler_pilevehicule (lấy ra stack), em hiểu vấn đề nhưng không biết làm thế nào
Lúc empile_pilevehicule(pv,v1), e không biết làm sao để thèn tpv (trong pv) trỏ đến v1 để lưu lại các thuộc tính ( tên xe, phân khối, tốc độ tối đa)
Phần code, em nghĩ có vấn đề nằm ở 2 thèn fonction đó