realloc i błedna alokacja - jak odwołac się do dynamicznej tablicy?

0

Cześć,
Pisze program ze spoja(http://pl.spoj.com/problems/BFN1/). Potrzebuję porównać dwie liczby - podaną na wejściu, oraz tę, która będzie jej lustrzanym odbiciem - zapisanie jej cyfr w odwrotnej kolejności.
Chciałbym, żeby kolejne cyfry zapisywane były w dynamicznie alokowanej tablicy.
Jak dynamiczna alokacja w C to realloc. Chyba źle rozumiem działanie tej funkcji. Wklejam kod, który udało mi się do tej pory wyprodukować:

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

using namespace std;

int main()
{

    int n = 0, count = 1; //n-wczytywana liczba, count- licznik pomocny przy alkowaniu tablicy

    int* pdiff, *pdiffreall; //wslazniki do dynamicznej alokacji
    pdiff = (int*)malloc(sizeof(int)); //rezerwacja pamieci na inta

    int ten = 10; //dzielnik
    cin >> n;
    while (n) {
        *pdiff = n % ten; //ustalanie ile odjac od n//i co wpisac do tablicy
        if (n % ten != 0) { //jesli n nie ma zera na koncach
            n = n - *pdiff;
            cout << *pdiff;
        }
        else {
            cout << *pdiff;
        }
        pdiffreall = (int*)realloc(pdiff, (sizeof(int) * count)); //przydzielam pamiec
        pdiffreall++;
        *pdiffreall = *pdiff; //przydzielam wartosc nowemu miejsc realokowanego bloku(za pierwszym razem tautologia)
        cout << endl
             << *pdiffreall << " <-pdiffreall" << endl; // test
        count++; //zwiekszam licznik, zeby zaalokowac zawsze o jeden blok wiecej
        n /= ten;
    }
    cout << endl
         << count - 1 << " ile obrotow petli" << endl;
    pdiffreall -= count + 1; //wskazanie na pierwsze miejsce bloku
    cout << endl
         << "-----------------------------" << endl;
    for (int i = 0; i <= count - 2; i++) {
        cout << *(pdiffreall+i) << " <-pdiffreall" << endl;
    }
    free(pdiffreall);
    return 0;
}

program wykonuje się, ale przy liczbach większych czterocyfrowych(bajty na inta - przypadek?!) następuje zrzut pamięci. To zdecydowanie nie jest zakres inta. Ponadto, nie mogę odwołać się, po wykonaniu while'a, do elementów tej nowo utworzonej dynamicznej tablicy.

Nie wiem dlaczego to nie działa. Ktoś może robił to zadanie w podobny sposób? Siedzę kolejną godzinę, wypróbowałem chyba wszystko i przekopałem pół internetu. Implementując funkcję, korzystałem głównie z tej strony:
http://www.geeksforgeeks.org/g-fact-66/

0

No przecież jak wykonasz realloc, to pdiff już może nie wskazywać na poprawny obszar pamięci.

0

Sugerujesz, ze potrzebuję jeszcze jakiegoś wskaźnika pomocniczego?

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