Witam. Mam pewien problem z moim programem, w którym wprowadzam dane osob i następnie wykonuje na nich operacje. A mianowicie cos powoduje, że wyrzuca mi bład w bibliotece stdio.h podczas wprowadzania danych w konsoli.(wpisuje imie i program sie zatrzymuje)
Błąd jest następujący:
Unhandled exception at 0x648F3FDA in 6.4.exe: 0xC0000005: Access violation writing location 0x00EA0FF8.
Kod programu
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#define WLK 40
struct rekord {
char imie[WLK];
char nazwisko[WLK];
int rok_urodzenia;
int nr_konta[WLK];
char nazwa_banku[WLK];
float srodki;
};
void wyswietlanie(struct rekord * asd,int n);
struct rekord * max(struct rekord * asd, int n);
struct rekord * min(struct rekord * asd, int n);
double suma(struct rekord * asd, int n);
void wprowadz_dane(struct rekord * asd, int n);
int main(void) {
struct rekord *osoba;
int ilosc_osob=0;
int p = 0;
osoba = (struct rekord*)malloc(ilosc_osob * sizeof(struct rekord));
if (osoba == NULL) {
printf("x\n");
}
printf("Podaj liczbe osob ktore chcesz wprowadzic:\n");
scanf_s(" %i", &ilosc_osob);
wprowadz_dane(osoba, ilosc_osob);
printf("Wyswietl wszystkich klientow[1]");
printf("\nKlient z najwieksza iloscia piniedzy[2]");
printf("\nKlient z najmniejsza iloscia piniedzy[3]");
printf("\nSuma[4]\n");
while (p == 0)
{
int w = 10;
scanf_s("%i", &w);
fflush(stdin);
switch (w)
{
case 1:
if (ilosc_osob == 0)
{
printf("brak danych do wyswietlenia\n");
}
else
{
wyswietlanie(osoba, ilosc_osob);
}
break;
case 2:
if (ilosc_osob == 0)
{
printf("brak danych do wyswietlenia\n");
}
else
{
wyswietlanie(max(osoba, ilosc_osob), 1);
}
break;
case 3:
if (ilosc_osob == 0)
{
printf("brak danych do wyswietlenia\n");
}
else
{
wyswietlanie(min(osoba, ilosc_osob), 1);
}
break;
case 4:
if (ilosc_osob == 0)
{
printf("brak danych do wyswietlenia\n");
}
else
{
printf("Suma srodkow: %f PLN\n", suma(osoba, ilosc_osob));
}
break;
case 0: p = 1;
free(osoba);
break;
default: printf("Zly symbol\n");
}
}
system("PAUSE");
return(0);
}
void wyswietlanie(struct rekord * asd, int n) {
for (int i = 0; i < n ;i++)
{
printf("Imie: %s\n", (asd+i)->imie);
printf("Nazwisko: %s\n", (asd+i)->nazwisko);
printf("Rok urodzenia: %d\n", (asd+i)->rok_urodzenia);
printf("Nr. konta: %d\n", (asd+i)->nr_konta);
printf("Nazwa banku: %s\n", (asd+i)->nazwa_banku);
printf("Dostepne srodki: %.2lf PLN\n", (asd+i)->srodki);
}
}
struct rekord * max(struct rekord * asd, int n) {
int i;
int a = 0;
struct rekord * max_asd = 0;
for (i = 0; i < n; i++) {
if (asd[a].srodki < asd[i].srodki)
a = i;
}
max_asd = asd + a;
return (max_asd);
}
struct rekord * min(struct rekord * asd,int n) {
int i;
int a = 0;
struct rekord * max_asd = 0;
for (i = 0; i < n; i++) {
if (asd[a].srodki > asd[i].srodki)
a = i;
}
max_asd = asd + a;
return (max_asd);
}
double suma(struct rekord * asd, int n) {
double suma = 0;
for (int i = 0; i < n; i++)
suma += asd[i].srodki;
return (suma);
}
void wprowadz_dane(struct rekord *asd, int n) {
for (int i = 0; i < n; i++)
{
printf("\nWprowadz imie : \n");
scanf_s("%s", (asd + i)->imie);
fflush(stdin);
printf("\nWprowadz nazwisko : \n");
fflush(stdin);
scanf_s("%s", (asd + i)->nazwisko);
printf("\nWprowadz rok urodzenia:\n");
scanf_s("%d", (asd + i)->rok_urodzenia);
printf("\nWprowadz nr konta:\n");
scanf_s("%d", (asd + i)->nr_konta);
printf("\nWprowadz nazwe banku:\n");
scanf_s("%s", (asd + i)->nazwa_banku);
printf("\nWprowadz srodki klienta:\n");
scanf_s("%d", (asd + i)->srodki);
}
}