我有一个问题,我不知道是否是我的MacBook或我的代码的问题。谢谢你的帮助!
我也试着看了一下设置,我真的不明白为什么不工作,为什么会出现这个错误。我是初学者,我有大学同事的代码
我真的不知道该给予哪些细节,我一直在寻找,但没有找到答案
我卸载了vscode并安装。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct Farmacie
{
char *denumire;
int nr_angajati;
float *salarii;
int an_infiintare;
};
struct Farmacie initializare(const char *denumire, int nr_angajati, float *salarii, int an_infiintare)
{
struct Farmacie f;
f.nr_angajati = nr_angajati;
f.an_infiintare = an_infiintare;
f.denumire = malloc((strlen(denumire) + 1) * sizeof(char));
strcpy(f.denumire, denumire);
f.salarii = malloc(sizeof(float) * nr_angajati);
for (int i = 0; i < nr_angajati; i++)
{
f.salarii[i] = salarii[i];
}
return f;
}
void afisareFarmacie(struct Farmacie f)
{
printf("Denumire: %s, infiintata in: %d", f.denumire, f.an_infiintare);
printf(", nr. angajati: %d, cu salariile: ", f.nr_angajati);
for (int i = 0; i < f.nr_angajati; i++)
printf("%5.2f, ", f.salarii[i]);
printf("\n");
}
struct Farmacie copiere(const struct Farmacie f2)
{
struct Farmacie aux;
aux.an_infiintare = f2.an_infiintare;
aux.nr_angajati = f2.nr_angajati;
aux.denumire = malloc((strlen(f2.denumire) + 1) * sizeof(char));
strcpy(aux.denumire, f2.denumire);
aux.salarii = malloc(sizeof(float) * f2.nr_angajati);
for (int i = 0; i < f2.nr_angajati; i++)
{
aux.salarii[i] = f2.salarii[i];
}
return aux;
}
struct Farmacie *adaugaFarmacieInVector(struct Farmacie *farmacii, struct Farmacie f, int *nr)
{
*nr = *nr + 1;
struct Farmacie *aux = malloc(sizeof(struct Farmacie) * (*nr));
for (int i = 0; i < *nr - 1; i++)
aux[i] = farmacii[i];
aux[*nr - 1] = copiere(f);
return aux;
}
int calculNrAngajati(struct Farmacie *farmacii, int nr)
{
int nrTotalAngajati = 0;
for (int i = 0; i < nr; i++)
{
nrTotalAngajati += farmacii[i].nr_angajati;
}
return nrTotalAngajati;
}
struct Farmacie citireFisier(FILE *f)
{
struct Farmacie aux;
char buffer[30];
fscanf(f, "%s", buffer);
aux.denumire = malloc(strlen(buffer) + 1);
strcpy(aux.denumire, buffer);
fscanf(f, "%d", &aux.nr_angajati);
aux.salarii = malloc(sizeof(float) * aux.nr_angajati);
for (int i = 0; i < aux.nr_angajati; i++)
{
fscanf(f, "%f", &aux.salarii[i]);
}
fscanf(f, "%d", &aux.an_infiintare);
return aux;
}
int main()
{
FILE *file = fopen("farmacie.txt", "r");
struct Farmacie fis = citireFisier(file);
afisareFarmacie(fis);
}
2条答案
按热度按时间toiithl61#
当你的程序试图访问不属于它的内存时,
Segmentation Fault
就会发生,这可能是当你试图访问一个悬空指针(一个内存已经被释放的指针)或者当你试图访问一个空指针时,当一个错误发生时,比如当那个文件不存在时,fopen
就会返回空指针。因此,在程序中使用从
fopen
、malloc
等接收到的指针之前,最好先检查它们,如下所示:也许可以尝试使用
gdb
运行程序,并查看回溯,看看它失败的地方。oxiaedzo2#
1.我不会返回结构(或将它们作为参数),因为这是非常昂贵的
if
:))