• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

C - IPC pamięć współdzielona - dziwny błąd (zmiana wartości bez rozkazania tego)

+1 głos
84 wizyt
pytanie zadane 15 lutego w C i C++ przez Deloryn Obywatel (1,600 p.)

Cześć. Podczas pracy nad projektem natrafiłem na rzecz, która jest trochę dziwna. Mianowicie wynikiem takiego kodu:

int idPamieci = shmget(1234, 10240, IPC_CREAT | 0666);
klient *klient1 = shmat(idPamieci, NULL, 0);
bool *graTrwa = shmat(idPamieci, NULL, 0);
*graTrwa = true;
    printf("1Gra trwa: %s\n",(*graTrwa)?"true":"false");
    printf("2Gra trwa: %s\n",(*graTrwa)?"true":"false");
    *klient1 = (klient){ 0, 0, 0, 0, 0, 0, 300, false};
    printf("3Gra trwa: %s\n",(*graTrwa)?"true":"false");

 

Będzie:

1Gra trwa: true
2Gra trwa: true
3Gra trwa: false

Dlaczego tak się dzieje? Przecież nie zmieniam między tymi linijkami wartości *graTrwa. O co może chodzić?

2 odpowiedzi

0 głosów
odpowiedź 15 lutego przez Bondrusiek Nałogowiec (35,520 p.)

Witam

spróbuj skomentować

//    *klient1 = (klient){ 0, 0, 0, 0, 0, 0, 300, false};

i zobacz czy dalej jest false. Być może w klasie klient wskaźnik graTrwa jest modyfikowany.

komentarz 15 lutego przez Deloryn Obywatel (1,600 p.)
Okazało się, że klient zajmuje miejsce graTrwa (tak to rozumiem). Teraz korzystam z osobnych buforów dla każdej ze zmiennych i jest okej ;)
0 głosów
odpowiedź 15 lutego przez draghan Szeryf (98,410 p.)

Cześć. Najpierw sprawdź, proszę, jakie adresy zawierają wskaźniki graTrwa oraz klient1. Po objawach wygląda na to, że wskazują na ten sam obszar w pamięci.

komentarz 15 lutego przez Deloryn Obywatel (1,600 p.)
Najwyraźniej właśnie tak było. Zrobiłem osobne bufory dla każdej ze zmiennych i działa ;)

Podobne pytania

0 głosów
1 odpowiedź 61 wizyt
0 głosów
1 odpowiedź 45 wizyt
pytanie zadane 16 grudnia 2017 w Sprzęt komputerowy przez aleksander_szut Użytkownik (890 p.)
0 głosów
4 odpowiedzi 261 wizyt
Porady nie od parady
Pytania na temat serwisu SPOJ należy zadawać z odpowiednią kategorią dotyczącą tej strony.SPOJ

53,042 zapytań

96,245 odpowiedzi

197,034 komentarzy

25,898 pasjonatów

Przeglądających: 145
Pasjonatów: 0 Gości: 145

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...