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

question-closed Dlaczego Naruszam pamięć ?

0 głosów
129 wizyt
pytanie zadane 1 grudnia 2019 w C i C++ przez PirchHD Obywatel (1,730 p.)
zamknięte 1 grudnia 2019 przez PirchHD

Cześć właśnie piszę grę "Gra w życie". Jak na razie zrobiłem wytwarzanie losowej tablicy (Na razie co odpale program jest taka sama ale to zmienie) oraz wypisywanie jej wraz z liczeniem cykli (Na razie jest ich 10) . Myślałem że nadpisałem tablice ale moim zdanie nie :p Prosze o pomoc

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int PierwszaTablicaLosowa();
int WypiszTab();

int tab[10][10];

int main(){
  PierwszaTablicaLosowa();
 for(int cykl = 0; cykl <= 10; cykl++){
  system("sleep 1");
  WypiszTab(tab[10][10]);
  system("clear");
 printf("\n Cykl: %d \n", cykl);
 }
return 0;
}
 
int PierwszaTablicaLosowa(){
  for (int i = 0; i < 10; i++){
    for (int j = 0; j < 10; j++){
      tab[i][j] = rand()%2;
      printf("%d ", tab[i][j]);
    }
  printf("\n");
  }
 return tab[10][10];
}

int WypiszTab(int tab[10][10]){
  for (int i = 0; i < 10; i++){
    for (int j = 0; j < 10; j++){
      printf ("%d",tab[i][j]);
    }
  printf ("\n ");
  }
return tab[10][10];
}

 

komentarz zamknięcia: Najlepsza

1 odpowiedź

0 głosów
odpowiedź 1 grudnia 2019 przez JAKUBW Nałogowiec (33,500 p.)
wybrane 1 grudnia 2019 przez PirchHD
 
Najlepsza
Tablica o nazwie tab ma 10 elementów, co oznacza, że pierwszy ma index 0, drugi ma index 1 ... a ostatni ma index 9. Ty w linijkach 14, 29 i 39 odczytujesz (próbujesz odczytać) element o indexie 10, mimo że ostatni ma index 9, dlatego czytasz pamięć, która nie należy do tej tablicy (i prawdopodobnie też w ogóle nie do twojego programu) i właśnie dlatego masz naruszenie pamięci.
komentarz 1 grudnia 2019 przez PirchHD Obywatel (1,730 p.)
A jeśli chciałbym żeby funkcja zwracała nam całą tablice to mam napisać " return tab; "??
komentarz 1 grudnia 2019 przez PirchHD Obywatel (1,730 p.)
edycja 1 grudnia 2019 przez PirchHD

@JAKUBW,
 Dzieki za pomoc wystarczyło zmienić w 14 linijce  i zmieniłem wszędzie na return 0; . Tylko teraz mam problem że tablica nie zostaje wypisana :/ Nwm jak zrobić by tab[10][10] została wysłana do funkcji "WypiszTab"

komentarz 2 grudnia 2019 przez JAKUBW Nałogowiec (33,500 p.)
a po co ją wysyłać do tej funkcji? Ta funkcja ma do niej dostęp, gdyż tablica jest globalna.

Podobne pytania

0 głosów
0 odpowiedzi 149 wizyt
pytanie zadane 8 listopada 2019 w C i C++ przez niezalogowany
0 głosów
0 odpowiedzi 100 wizyt
pytanie zadane 19 lutego 2020 w Python przez Pico Obywatel (1,270 p.)
0 głosów
0 odpowiedzi 105 wizyt
pytanie zadane 30 czerwca 2020 w Systemy operacyjne, programy przez Chochołek Nowicjusz (120 p.)

87,903 zapytań

136,488 odpowiedzi

304,301 komentarzy

58,284 pasjonatów

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.

...