Przypisanie tablicy pod buffor crashuje program

0

Witam, mam problem, muszę napisać program, który wykonuje parę operacji, ale problem póki co jest w jednej tylko (bo dopiero jedną napisałem), program ma za zadanie dodać do tablicy dynamicznej kolejne wartości, ale wpierw ją musi rozszerzyć, problem w tym, że podczas przypisywania tablicy pod buffor, crashuje się program, czy mógłby ktoś pomóc z tym? Problem występuje w funkcji "dodawanie_elementu".

#include <iostream>
using namespace std;

int n,*tab1, *buff;

int tworzenie_tablicy()
{
    cout<<"Podaj rozmiar tablicy = ";
    cin>>n;
    cout<<endl;
    int *tab1 = new int[n];
    for (int i=0;i<n;i++)
    {
        cout<<"Podaj "<<i+1<<" wartosc tablicy = ";
        cin>>tab1[i];
    }
}

void dodawanie_elementu(int n)
{
    int x;
    int *buff = new int[n];
    cout<<"Ile elementow chcesz dodac?"<<endl<<"x = ";
    cin>>x; //Ile elementow dodać
    for (int i=0;i<n;i++)
        buff[i]=tab1[i]; //Przypisanie tablicy tab1 pod buffor
    tab1 = new int[n+x]; //Zresetowanie tablicy tab1 i rozszerzenie jej
    for (int i=0;i<n;i++)
        tab1[i]=buff[i]; //Przypisanie poprzednich znakow pod tab1 z buffora
    for (int i=n;i<n+x;i++)
    {
        cout<<"Podaj "<<n+1<<" wyraz = ";
        cin>>tab1[i]; //Dopisanie nowych znakow
    }
}

void usuwanie_elementu()
{

}

void tablica_parzysta()
{

}

void wyswietlenie_tablic()
{

}

void wyjscie()
{

}

void wybor_operacji()
{
    int x;
    cout<<"Program umozliwia wykonywanie, dla tablicy jednowymiarowej dynamicznej liczb calkowitych wybranej operacji"<<endl;
    do
    {
        cout<<endl<<"Wybierz operacje"<<endl<<endl<<"1. Utworzenie wlasnej tablicy"<<endl<<"2. Dodanie nowego elementu"<<endl<<"3. Usuwanie istniejacego elementu"<<endl<<"4. Utworzenie tablicy zawierajacej elementy parzyste"<<endl<<"5. Wyswietlenie tablicy"<<endl<<endl;
        cout<<"Wybor = ";
        cin>>x;
        cout<<endl;
        switch (x)
        {
        case 1:
            {
                tworzenie_tablicy();
                break;
            }
        case 2:
            {
                dodawanie_elementu(n);
                break;
            }
        case 3:
            {
                usuwanie_elementu();
                break;
            }
        case 4:
            {
                tablica_parzysta();
                break;
            }
        case 5:
            {
                wyswietlenie_tablic();
                break;
            }
        case 0:
            {
                wyjscie();
                break;
            }
        default:
            {
                cout<<"Brak takiej opcji"<<endl;
                break;
            }
        }
    }
    while (x!=0);
}

int main()
{
    wybor_operacji();


}

0

int *tab1 = new int[n]; - nie działa w C++ (za wyjątkiem jednego kompilatora).
... impreza mocno zakrapiana ...

2
May2Bee napisał(a):
void dodawanie_elementu(int n)
{
    int x;
    int *buff = new int[n];
    cout<<"Ile elementow chcesz dodac?"<<endl<<"x = ";
    cin>>x; //Ile elementow dodać
    for (int i=0;i<n;i++)
        buff[i]=tab1[i]; //Przypisanie tablicy tab1 pod buffor
    tab1 = new int[n+x]; //Zresetowanie tablicy tab1 i rozszerzenie jej
    for (int i=0;i<n;i++)
        tab1[i]=buff[i]; //Przypisanie poprzednich znakow pod tab1 z buffora
    for (int i=n;i<n+x;i++)
    {
        cout<<"Podaj "<<n+1<<" wyraz = ";
        cin>>tab1[i]; //Dopisanie nowych znakow
    }
}


Cieknie i to strasznie. Użyj std::vector.
Nie wiem czy jesteś świadomy, ale c++ nie ma garbage collector i wszytko co zaalokujesz musisz samemu zwolnić.

May2Bee napisał(a):
int n,*tab1, *buff;

Jaka twoim zdaniem jest początkowa wartość n?

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