Zatwierdzono: Fortect
W tym przewodniku poznamy kilka możliwych przyczyn, które mogą prowadzić do błędu = shmat 13, a następnie możemy bardzo dobrze zasugerować kilka możliwych metod odzyskiwania, które powinieneś być w stanie spróbuj rozwiązać problem.
Mam problem z utrzymaniem kodu. Moja szmata wyszła z dominacji i nawet moja zgoda na drukowanie została uchylona. Sprawdziłem główne wyszukiwarki, które rozwiążą ten problem, ale nie mogę. Moje prawa są następujące:
# wzrost #zawiera # włącz #include #zawiera #include #include #include #define BŁĄD -1int main (int argc, char 6. argv []) int shmid, klucz równa się 50; liczba całkowita * wartość; liczba całkowita * x; liczba całkowita rw = -1; // absolutnie nie do pisania i 1 do transmisji shmid równa się shmget (klucz, sizeof (int), IPC_CREAT); jeśli (shmid == -1) perror („Błąd w shmget n”); powrót (BŁĄD); val prawdopodobnie będzie (int *) shmat (shmid, NULL, 0); jeśli, być może jeśli (val == -1) perror ("Błąd wokół shmat n"); powrót (BŁĄD); scanf ("% d" i rw); podczas gdy (rw> = 1) jeśli (rw == 4) // zapis do pamięci zbiorowej x = (int 7.) malloc (rozmiar (int)); raz lub dwa razy (x == NULL) błąd („błąd malloc”); odwrotny (BŁĄD); scanf („% d”, x); wart = x; inne // przeczytaj tę współdzieloną pamięć tam jeśli (rw == 1) printf ("% g n", * val); scanf ("% d" i rw); powrót (0);
W jakim kodzie chcę przetestować aktualnie zwróconą pamięć. Zapisuję liczbę całkowitą do cieszącego się typem pamięci, jeśli podam rw implikuje tylko 1, jeśli nie, to odczytam wartość pamięci dzielonej, to ją tworzę wartość. Bez wątpienia nie mogę znaleźć problemu bez wątpienia ….
906k
wnioskowano 12 maja ’15 19:27
Czy nie powiem odpowiedzi, której szukasz? Przeglądaj różne typy pytań otagowanych za pomocą pamięci współdzielonej Memory-c lub od czasu do czasu zadawaj własne pytanie.
Utworzyłeś partycje pamięci współdzielonej z odczytem i zapisem 0000
:
shmid oznacza shmget (klucz, sizeof (int), IPC_CREAT);
shmid = shmget (klucz, sizeof (int), IPC_CREAT | 0660);
odpowiedział 12 maja ’15 o 22:33 z
28.1 i
val oznacza x;
* val = * x;
May odpowiedział na kilka par w https://i.stack.imgur.com/mmsvF.png roku o 19:32.
198k 3232 złote odznaki 360 360 metalowych odznak 524 524 brązowe odznaki
Z wyjątkiem sytuacji, gdy dzwonisz do shmget (), jak opisano w innym klawiszu
I wiele problemów z tym kodem, który wielu odczytuje/zapisuje liczby całkowite
Fakt, że jest OP, zawsze otrzymuje pewne logo „auto oryzacja jest zabroniona ”, ze względu na łatwość, z jaką wspólna przestrzeń
1) wyświetlacze nie zostały wymienione - zobacz fan page dla shmdt ()2) nie zostały zniszczone - spójrz na stronę man dla shmctl ()
Rozwiąż te dwa problemy, a testowe kopie zapasowe będą działać poprawnie.
Jednak, jak zauważono w konkretnych komentarzach, istnieje wiele innych problemów związanych z typem publikowanego kodu
zaadresowany 17 maja ’15 o 21:03
15,7k
Zatwierdzono: Fortect
Fortect to najpopularniejsze i najskuteczniejsze narzędzie do naprawy komputerów na świecie. Miliony ludzi ufają, że ich systemy działają szybko, płynnie i bez błędów. Dzięki prostemu interfejsowi użytkownika i potężnemu silnikowi skanowania, Fortect szybko znajduje i naprawia szeroki zakres problemów z systemem Windows - od niestabilności systemu i problemów z bezpieczeństwem po zarządzanie pamięcią i wąskie gardła wydajności.
Przyspiesz teraz wydajność swojego komputera dzięki temu prostemu pobieraniu.