Aborted (Zrzut pamięci) - o co chodzi?

0

Cześć.
Mam pewien problem z alokacją pamięci. Staram się rozwiązać SPOJowe zadanie:
http://pl.spoj.com/problems/PP0502B/
i niestety program nie działa. Wklejam kod(opis problemu pod spodem):

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

using namespace std;

int main(){
    int rozmiar = 0, testy = 0;
    cin>>testy;
    int *tablica;
    while(testy){

        cin>>rozmiar;
        tablica=(int *)malloc(sizeof(int)*rozmiar);
        for(int i = 0; i<rozmiar; i++){
            cin>>*tablica;
            tablica++;
        }
        tablica--;
        for(int i =rozmiar-1;i>=0; i--){
            printf("%d ", *tablica);
            tablica--;
        }

        
        cout<<endl;
        testy--;
        free(tablica);
    }

    return 0;
}

Dla ilości testów >5 następuje zrzut pamięci w trakcie wykonywania programu. Wersja kompilatora - 4.9.2, wszystko pod cygwinem. Kod chyba jest dość jasny.
Znalazłem rozwiązanie zadania na forum(bazujące na rekurencji), ale chciałbym zrobić to tą metodą. Na stacku jest trochę o tym, ale problemy z pamięcią są mocno... indywidualne? Poza tym często kawałki kodu są dość pokaźne i zaawansowane - trudno się w nich połapać laikowi.
Ma ktoś jakiś pomysł? Byłbym bardzo wdzięczny za pomoc.

2

Nieczytelność level over 9000. Serio musisz te pętle pisać w tak chory sposób? Nie da sie po ludzku nie ruszać tego wskaźnika tylko robić tablica[i]? Bo błąd polega właśnie na tym że przesuwasz wskaźnik tablica na pozycje -1 a potem robisz free ;]

0

po co w ogole dynamicznie alokujesz pamiec, nie lepiej po prostu zrobic

int rozmiar = 0, testy = 0, tablica[100];

i zapomniec o wskaznikach?
na dodatek niepotrzebnie mieszasz c++ i c, spoj czasem ma na to alergie :)

0

@Shalom, czytałem wcześniej parę tematów na forum i, szczerze mówiąc, liczyłem na Ciebie. Oczywiście masz rację, dzięki. SPOJ nawet nie miaukął.
Poniżej wklejam poprawny kod, może przyda się potomnym:

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

using namespace std;

int main(){
    int rozmiar = 0, testy = 0;
    cin>>testy;
    int *tablica;
    while(testy){
        cin>>rozmiar;

        tablica=(int *)malloc(sizeof(int)*rozmiar);

        for(int i = 0; i<rozmiar; i++){
            cin>>tablica[i];
        }

        for(int i =rozmiar-1;i>=0; i--){
            printf("%d ", tablica[i]);
        }
        cout<<endl;
        testy--;
        free(tablica);
    }
    return 0;
}

Propsy za DBZ.

@katelx lubię wskaźniki. I chyba to jest ten sam rodzaj chorej sympatii jak ta, którą darzę np. vima.

1 użytkowników online, w tym zalogowanych: 0, gości: 1