Deklaracja zmiennych i tablice. Linux

0

Strasznie dziwna sprawa, mianowicie : deklaruje zwyczajną tablice jednowymiarową zapisuje do niej zawartośc argumentu przekazanego z maina(). Podczas wypisania zawartości tablicy otrzymuje różne rezultaty w zależności od zadeklarowanych zmiennych, nie mogę w to uwierzyć (wydaje mi się że w Linuksie przypisywanie adresów do zmiennych i tablic odbywa się w jedym segmencie -taka moja teoria) wiec na przykład :

 
...
int i,j;      // ,k;
...
char *tab= argv[1]    // *tab="abc";
printf("%s",tab);       
...

za jednym razem funkcja wypisze poprawenie "abc", ale gdy zadeklaruje kojeną zmienna (k) to funkcja wypisze "abc!@#$$#".
Początkowa część jest zgoda tylko dodaje jakieś zbędne krzaczki, nie wiem jak to interpretować przez przypadek odkryłem taką zależność.

0

Najprawdopodobniej przekraczasz zakres jakiejś tablicy i nadpisujesz zero na końcu argumentu argv[1], pokaż wiecej kodu, albo sprawdz go na ideone.com

0

Wyniki moich testów:

#include <stdio.h>

int main(int argc, char** argv) {
	int i, j, k;
	char *out = argv[1];	
	printf("%s\n", out);
	return 0;
}
 

Output:

marcin@mskiba:~/Pulpit/test$ ./prog abc
abc 
#include <stdio.h>

int main(int argc, char** argv) {
	int i, j;
	char *out = argv[1];	
	printf("%s\n", out);
	return 0;
}

Output:

marcin@mskiba:~/Pulpit/test$ ./prog abc
abc 

Czyli wszystko działa jak powinno ;) Pokaż cały kod, inaczej nie pojedziem.

0

Program był o wiele bardziej rozbudowany, wczoraj go dokończylem i szkoda że nie zrobilem kopi w momencie gdy problem się pojawiał.
Teraz na szczeście wszytko działa, szkoda czasu na odtworzenie tamtego stanu choć to ciekawa sprawa. W takim razie temat chyba można uznać za zamkniety.

0

uruchom twój program w valgrind z memcheck'iem. Jest duża szansa, że znajdzie kilka problemów.
Z argv[1] może być problem do to chyba wskazuje na stos, a valgrind nie potrafi wykrywać błędów dostępu do pamięci na stosie.

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