• 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,520 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 (31,130 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,520 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 (97,930 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,520 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ź 58 wizyt
0 głosów
1 odpowiedź 44 wizyt
pytanie zadane 16 grudnia 2017 w Sprzęt komputerowy przez aleksander_szut Użytkownik (850 p.)
0 głosów
4 odpowiedzi 232 wizyt
Porady nie od parady
Odznacz odpowiedź zieloną fajką, jeśli uważasz, że jest ona najlepsza ze wszystkich i umożliwiła ci rozwiązanie problemu.
Ciekawy innych porad? Odwiedź tę stronę!

48,556 zapytań

90,186 odpowiedzi

181,559 komentarzy

23,506 pasjonatów

Przeglądających: 186
Pasjonatów: 13 Gości: 173

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.

...