void nacitaj(float *znamky, char meno[], int *pocet, float *sucet) {
znamky = (float *) malloc(POCET * sizeof(float));
float pom;
int i = 0;
*sucet = 0;
printf("\n%s\n", meno);
printf("Zadajte, prosim vase znamky:\n");
while (scanf("%f", &pom) == 1) {
if (pom >= 1 && pom <= 5) {
*sucet += pom;
znamky[i++] = pom;
} else {
printf("Cislo %3.2f neni znamka!\n", pom);
}
}
*pocet = i;
return;
}
vsetko funguje spravne, len alokovane pametove miesta fciou malloc po skonceni fcie nacitaj sa stratia (prestanu platit)...
cize 2.fcia vypis potom nefunguje spravne.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *hello;
void pokus(char **x, int n)
{
*x = malloc(n);
strcpy(*x, "hello");
printf("&x = %10p -- adresa pointera my (v stackframe funckie pokus)\n", &x);
printf("x = %10p -- adresa na ktoru ukazuje pointer x\n", x);
printf("*x = %10s -- hodnota, ktora sa nachada na adrese na ktoru ukazuje pointer x\n", *x);
printf("&hello = %10p\n", &hello);
printf("hello = %10p\n", hello);
}
int main()
{
pokus(&hello, 10);
printf("platne hello = %s\n", hello);
free(hello);
return 0;
}
lebo potom sa to sprava ako viacrozmerne....
#include <stdio.h>
#include <stdlib.h>
#define POCET 10
void pokus(int **pole);
int main() {
int *pole,i;
pokus(&pole);
for (i = 0; i < POCET; i++)
printf("pole[%d] == %d\n", pole[i], pole[i]);
free(pole);
return 0;
}
void pokus(int **pole) {
int i;
*pole = malloc(1); // 1 riadok [viacrozmerne pole]
// stlpce ???
for (i = 0; i < POCET; i++)
*pole[i] = i;
}
/*
* oprava :
*/
#include <stdio.h>
#include <stdlib.h>
#define POCET 10
void pokus(int **pole);
int main() {
int *pole,i;
pokus(&pole);
for (i = 0; i < POCET; i++)
printf("pole[%d] == %d\n", pole[i], pole[i]);
free(pole);
return 0;
}
void pokus(int **pole) {
int i;
*pole = malloc(POCET * sizeof(int)); // 1 riadok [viacrozmerne pole]
// stlpce ???
for (i = 0; i < POCET; i++)
(*pole)[i] = i;
}
a pritom aka mala chyba (obycajne zatvorky :D )
PS:ten riadok s malloc som mal dobre...len som sa potom uz zacal domnievat ze to je dvojrozmerne pole :D