[solved] Segmentation fault (core dumped) przy konwersji ze stringa na arraya

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
Awatar użytkownika
marconi
Piegowaty Guziec
Piegowaty Guziec
Posty: 18
Rejestracja: 08 sty 2007, 15:11
Płeć: Mężczyzna
Wersja Ubuntu: 9.10
Środowisko graficzne: GNOME
Architektura: x86

[solved] Segmentation fault (core dumped) przy konwersji ze stringa na arraya

Post autor: marconi »

Czesc!
Mam o to taka funkcje, która konwertuje stringa na array.
Jej wywolanie to:

Kod: Zaznacz cały

    int parc2;
    char *parv2[34];
    parc2 = rrd_s2a(" abc abc",parv2); 
Chodzi mi aby w czasie pracy mojego programu wydawane komendy np.

Kod: Zaznacz cały

>>rysuj wykres zyskow kolor  
zamienialy sie na:

Kod: Zaznacz cały

  parv2[parc2++] = "rysuj";
  parv2[parc2++] = "wykres";
  parv2[parc2++] = "zyskow";
  parv2[parc2++] = "kolor";
zrodla fragmentu mojego programu, ktore sluza mi do testo sa tutaj

Chodzi konkretnie o ten fragment:

Kod: Zaznacz cały

		if ((p = strchr(buf, ' ')) != NULL) {
			*p++ = '\0';
			buf  = p;
		} else
W gdb wyszlo na to ze wina lezy w dodawaniu znaku konca: '\0'. Ale ja szczerze nie wiem jak mam to zrobic poprawnie.
Program received signal SIGSEGV, Segmentation fault.
0x08048502 in rrd_s2a (string=0x804862c " abc abc", parv=0xbfd48be4)
at test.c:26
26 *p++ = '\0';
Prosze o pomoc - w jaki sposob mam wrzucic znak konca tak aby nie naruszyc ochrony pamieci?
bedzie co ma byc...
Awatar użytkownika
el.pescado
Zakręcona Traszka
Zakręcona Traszka
Posty: 734
Rejestracja: 26 maja 2005, 11:43
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

Odp: Segmentation fault (core dumped) przy konwersji ze stringa na arraya

Post autor: el.pescado »

Wydaje mi się, że wywołujesz swoją funkcję na stałej napisowej, a stałe mają to do siebie, że są stałe. Zmień wywołanie na

Kod: Zaznacz cały

char *txt = strdup(" abc abc");
parc2 = rrd_s2a (txt, argv2);
...
free (txt);
i powinno działać.
vtr
Sędziwy Jeż
Sędziwy Jeż
Posty: 36
Rejestracja: 02 lip 2008, 13:58
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86

Odp: Segmentation fault (core dumped) przy konwersji ze stringa na arraya

Post autor: vtr »

wg mnie błąd jest w tej lini i w liniach do tej podobnych

Kod: Zaznacz cały

*p++ = '\0';
popatrz wskaźnik na char to tylko wskaźnik i nie wiesz w jakim obszarze pamięci sie znajduje a pisząc to co wyżej po przypisaniu znaku końca lini p wskazuje na obszar p+sizeof(char) więc nie wiadomo na co i tu jest błąd podobnie ze wskaźnikiem buf w późniejszej części kodu.
Awatar użytkownika
marconi
Piegowaty Guziec
Piegowaty Guziec
Posty: 18
Rejestracja: 08 sty 2007, 15:11
Płeć: Mężczyzna
Wersja Ubuntu: 9.10
Środowisko graficzne: GNOME
Architektura: x86

Odp: Segmentation fault (core dumped) przy konwersji ze stringa na arraya

Post autor: marconi »

Dziala :w00t: - Super!
Wielkie dzieki. Jeszcze duzo nauki przedemna!:wall:
Uwagii vtr pewnie sa ok, zreszta tez nad tym kombinowalem. Jednak to rozwiazanie zaproponowane przez el.pescado zadzialalo za pierwszym szczalem.
Link do rozwiazania poprawionego, ktore dziala. gut_rozwiazanie
bedzie co ma byc...
Zablokowany

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 78 gości