• 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
Komentarze do pytań nie służą do odpowiadania, od tego jest wydzielona sekcja odpowiedzi. Funkcją komentarzy jest natomiast możliwość uzyskania dodatkowych informacji na temat samego posta.Komentarze

53,042 zapytań

96,245 odpowiedzi

197,034 komentarzy

25,898 pasjonatów

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

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.

...