Witam,
Problem jest taki że gdy odkomentuje linijkę :
d->tablicaSplotowa = (float *) calloc(3, sizeof(float)); to zachowuję się jakby mi nadpisywała tablice tab.
spotkał się ktoś kiedyś z takim problemem??
#include <stdio.h>
#include <stdlib.h> // malloc, free
struct Dane {
float k1, k2, k3;
int wielkoscTablicy; //liczba elementow tablicy z którą dokonamy splotu z zmiennymi k1,k2,k3
int *tab; // tablica zawierajaca wartosci podane przez uzytkownika
float *tablicaSplotowa;
};
void wypelnijTablice(struct Dane *d); //funkcja sluzy do wypelnienia tablicy danymi pobranymi przez uzytkownika
void wypiszTablice(struct Dane d); //wypisuje tablice z danymi podanymi przez uzytkownika
void dokonajSplotu(struct Dane *d)
{
int i; // iterator petli
float tmp; // wartosc tymczasowa
float sumaWag = (d->k1 + d->k2 + d->k3);
d->tablicaSplotowa = (float *) calloc(3, sizeof(float));
if( d->tablicaSplotowa == NULL) printf("nie udalo sie przydzielic pamieci");
printf(" tab[0] = %d tab[1] = %d tab[2] = %d tab[3] = %d \n ", d->tab[0], d->tab[1], d->tab[2], d->tab[3]);
/*
for(i = 1; i < d->wielkoscTablicy - 1; ++i)
{
tmp = ((d->tab[i-1] * (d->k1)) + (d->tab[i] * d->k2) + (d->tab[i+1] * (d->k3)) / sumaWag);
d->tablicaSplotowa[i-1] = ((d->tab[i-1] * (d->k1)) + (d->tab[i] * d->k2) + (d->tab[i+1] * (d->k3)) / sumaWag);
//printf(" tmp = %f \n ", tmp);
printf(" tab[-1] = %d tab[0] = %d tab[1] = %d \n ", d->tab[i-1], d->tab[i], d->tab[i+1]);
}
*/
}
void wypiszTabliceSplotowa(struct Dane d)
{
int i;
for(i = 0; i < d.wielkoscTablicy - 2; ++i)
printf("%f ", d.tablicaSplotowa[i]);
}
int main()
{
struct Dane dane;
printf("Podaj liczbe elementow : ");
scanf("%d", &dane.wielkoscTablicy);
printf("Podaj elementy k1, k2, k3 \n");
scanf("%f %f %f", &dane.k1, &dane.k2, &dane.k3);
wypelnijTablice(&dane);
wypiszTablice(dane);
dokonajSplotu(&dane);
wypiszTabliceSplotowa(dane);
return 0;
}
void wypelnijTablice(struct Dane *d)
{
int i; // iterator petli for
int elementTablicy;
d->tab = (int *)malloc(sizeof(d->wielkoscTablicy * sizeof(int))); //zamiast calloc , stworzyłem jeden wielka przestezen pamieci
for(i = 0; i < d->wielkoscTablicy; ++i)
{
printf("\nPodaj %i element rablicy ", i);
scanf("%d", &elementTablicy);
*((d->tab) + i) = elementTablicy;
}
}
void wypiszTablice(struct Dane d) //wypisuje tablice z danymi podanymi przez uzytkownika
{
int i;
for(i = 0; i < d.wielkoscTablicy; ++i)
printf("%d ", d.tab[i]);
}