Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Przekroczony limit pamięci - sygnał 6 (przy działaniu na dynamicznych tablicach)

Ostatnio zmodyfikowano 2010-11-24 18:48
Autor Wiadomość
Tiestes
Temat założony przez niniejszego użytkownika
Przekroczony limit pamięci - sygnał 6 (przy działaniu na dynamicznych tablicach)
» 2010-11-24 14:04:23
Witam,
jestem początkujący w c++, dlatego proszę o wyrozumiałość w przypadku głupich błędów:)
mam problem z programem do transponowania macierzy, który napisałem używając dynamicznej tablicy dwuwymiarowej.

Program działa, jednak na kompilatorze http://ideone.com/ otrzymuję błąd:
wynik: Przekroczony limit pamięci     czas: 0s    pamięć: 3808 kB     sygnał: 6
o treści:

terminate called after throwing an instance of 'std::bad_alloc'
  what():  std::bad_alloc

domyślam się że chodzi o wyciek pamięci który sprawdziłem za pomocą porad zamieszczonych w tym artykule: http://cpp0x.pl/artykuly/?id=4
błąd wskazał miejsce definiowania tablicy (int **tab=new int*[m];)

Poniżej zamieszczam polecenia z kodu odpowiedzialne za tworzenie i usuwanie tablicy.

C/C++
int m, n;
int ** tab = new int *[ m ];
cin >> m >> n;
for( int j = 0; j < m; j++ )
     tab[ j ] = new int[ n ];

.
.
.
for( int j = 0; j < m; j++ )
     delete[] tab[ j ];

delete[] tab;
getch();
return 0;
}

Jeżeli ktoś ma jakiś pomysł, na rozwiązanie powyższego błędu lub może na inne zdefiniowanie tablicy, bardzo bym prosił o pomoc.
Pozdrawiam
P-24429
DejaVu
» 2010-11-24 14:10:03
Najpierw rezerwujesz pamięć, a potem wczytujesz ile elementów należy zarezerwować. Reasumując: masz wartość przypadkową w pamięci, więc program się wywali.
P-24430
Tiestes
Temat założony przez niniejszego użytkownika
» 2010-11-24 14:30:48
Dziękuję za odpowiedź. Jednak nadal nie za bardzo wiem jak rozwiązać ten problem...
Tablice tworzę i usuwam z pamięci w dobry sposób?
P-24433
DejaVu
» 2010-11-24 15:35:10
C/C++
int ** tab = new int *[ m ];
cin >> m >> n;
Zastanów się nad sensem powyższych linijek.
P-24437
Tiestes
Temat założony przez niniejszego użytkownika
» 2010-11-24 15:58:30
Zmiana kodu na taką postać:
int m, n;
cin >> m >> n;
int ** tab = new int *[ m ];
for( int j = 0; j < m; j++ )
     tab[ j ] = new int[ n ];

.
.
.
for( int j = 0; j < m; j++ )
     delete[] tab[ j ];

delete[] tab;
getch();
return 0;
}

nie rozwiązuje problemu. Wciąż pojawia się ten sam błąd.

W linku zamieszczam print screen'a tego błędu oraz kompilacji mojego programu przez http://ideone.com.
http://img35.imageshack.us/img35/831/bladwx.png

Początkowo miałem właśnie powyższą wersję jednak w akcie desperacji, gdy cały czas pojawiał mi się ten błąd zacząłem wszystko po kolei zmieniać i ostatecznie wysłałem przez nie uwagę zmienioną wersję.

Czy może jeszcze chodzi Ci o coś innego czego nie widzę?
P-24438
Elaine
» 2010-11-24 16:29:55
Nie podajesz żadnego wejścia, więc m i n mają wartości osobliwe, w wyniku czego program próbuje zaalokować, jak się okazuje, za dużo pamięci.
P-24440
Tiestes
Temat założony przez niniejszego użytkownika
» 2010-11-24 16:46:35
Wybaczcie, ale wciąż nie mam pojęcia jak to zrobić żeby działało. Rozumiem już o co chodzi, jednak nie wiem co zrobić, żeby ograniczyć tą alokację pamięci.
P-24441
Elaine
» 2010-11-24 16:59:25
Na przykład podać wejście, bo obecnie program bierze wartości z sufitu?
P-24444
« 1 » 2 3
  Strona 1 z 3 Następna strona