Przekazywanie struktury do funkcji

0

Cześć

Męcze się z tym już kilka godzin i nie mam pojęcia o co chodzi :(
Mianowicie mam strukturę, która zawiera jakąś tablicę uzupełnioną danymi. Wszystko jest super, mogę z niej wypisać dane do momentu, w którym przekazują wskaźnik do struktury do innej funkcji. Tam już pojawiają się losowe liczby zamiast moich.

test_struct_t test = load_test_struct("test");
	
int i;
for(i = 0; i < test->n; i++)
	printf("%d %d\n",test->x[i][0], test->x[i][1]); /* Tutaj super wszystko wypisywane */

game_t game = start(test, map);

A w funkcji start już na samym początku próbując wypisać dane w identyczny sposób dostaję liczby typu 0 lub 4196224.
Może źle alokuję struktury?

game_t game = (game_t) malloc(sizeof(struct Game));

Pozdrawiam
VeloxDigitis

0

Kod który pokazałeś wygląda w porządku. Obstawiam problemy z pamięcią w funkcji load_test_struct lub w start. Pokaż więcej kodu to będzie łatwiej znaleźć rozwiązanie twojego problemu.

Dla pewności dodam:

game_t game = (game_t) malloc(sizeof(struct Game));

game_t to wskaźnik?

1

Kiedy napisałem ten temat coś mnie natchnęło. Okazało się, że problemem był memset w zupełnie innym miejscu, który zerował coś zupełnie innego (czyli pewnie zerował za dużo). W każdym razie dzięki! :D

Jednak nie do końca.

printf("%s %d %d\n", test->name, test->x[1][0], test->x[1][1]); // Dobrze
game->test= test;
printf("%s %d %d\n", game->test->name, game->test->x[1][0], game->test->x[1][1]); //Źle

A jeszcze ciekawiej, test->name i game->test->name się zgadzają, ale dane w tablicy już nie

0
VeloxDigitis napisał(a):

Kiedy napisałem ten temat coś mnie natchnęło. Okazało się, że problemem był memset w zupełnie innym miejscu, który zerował coś zupełnie innego (czyli pewnie zerował za dużo). W każdym razie dzięki! :D

Jednak nie do końca.

printf("%s %d %d\n", test->name, test->x[1][0], test->x[1][1]); // Dobrze
game->test= test;
printf("%s %d %d\n", game->test->name, game->test->x[1][0], game->test->x[1][1]); //Źle

A jeszcze ciekawiej, test->name i game->test->name się zgadzają, ale dane w tablicy już nie

Pokaż więcej kodu - czym jest test, jak jest alokowany itp.

0
typedef struct Test{
	char *name;
	int (*x)[2];
	int n;
} *test_t;

test_t alloc_test(char *name, int n) {
	test_t test = (test_t) malloc(sizeof(struct Test));
	test->name = malloc((strlen(name) +1 ) * sizeof(char));
	strcpy(test->name, name);
	test->n = n;
	test->x = malloc (n * sizeof(int *) + (n * (2 * sizeof(int))));
	return test;
}

/* Wczytywanie wartości 
Może tutaj coś nie tak*/
int x[n][2]; 
for (i = 0; i < n; i++)
	fscanf(in, "%d %d", &x[i][0], &x[i][1]);
	
int (*temp)[2] = x;
test->x = temp;

Dobra, wiem, że przy wczytywaniu nie muszę na około:

for (i = 0; i < n; i++)
	fscanf(in, "%d %d", &test->x[i][0], &test->x[i][1]);

1 użytkowników online, w tym zalogowanych: 0, gości: 1