Rozmiar tablicy dynamicznej

Rozmiar tablicy dynamicznej
M1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 106
0
  1. Prosty program, tworze tablice dynamicznie o zadanej przez uzytkownika rozmiarze. Np wybieram 3 elementową ( czyli indeksy są 0 1 2 ).
    Teraz daje mozliwosc edytowania dowolnego elementu i powiedzmy ze chce do indeksu 6 (!) ( przeciez ma 3 elementy ) dodac wartosc np 10. Potem mam mozlwiosc wyswietlenia dowolnego indeksu.
    Wpisuje i dlaczego nie wywala mi zrzutu pamięci czy cos w tym stylu ?
    Zwraca ze w tab[6] jest wartosc 10.
    Czy to jest tak ze tablica tworzona dynamicznie, moze zmieniac swoj rozmiar ? Wydaje mi się ze tak nie jest. O co tutaj chodzi ?
Kopiuj
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <string>
#include <stdlib.h> 
#include <ctime>
#include <cmath>

using namespace std;


int main(){

cout<<"podaj rozmiar : "<<endl;
int rozmiar;
cin>>rozmiar;

int * tab = new int[rozmiar];

int ind,wart;
cout<<" Ktory indeks edytowac ? "<<endl;
cin>>ind;
cout<<" Jaka tutaj wstawic wartosc ? "<<endl;
cin>>wart;

tab[ind]=wart;

int ktory;
cout<<" Ktory el wysiwetlic "<<endl;
cin>>ktory;
 
cout<<tab[ktory];

return 0;
}
 
_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
1

C/C++ nie sprawdza indeksacji tablicy, sięgając po za zakres sięgasz do okolicznej pamięci.
Jeżeli sięgniesz poza zakres przeznaczony dla programu to system operacyjny może na to zareagować w sposób jemu właściwy.

Shalom
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Space: the final frontier
  • Postów: 26433
0

@misiek123 zobacz sobie coś takiego:

Kopiuj
#include <iostream>
using namespace std;

int main(){
    int tablica[2] = {1, 2};
    int z = 3;
    int v = 4;
    for (int i=0; i<4; i++){
        cout<<tablica[i]<<endl;
    }
    return 0;
}

Nie muszę chyba mówić że jeśli wpiszesz coś do tab[2] albo tab[3] to "popsujesz" wartości zmiennych z oraz v? ;)

Azarien
  • Rejestracja: dni
  • Ostatnio: dni
1

Wpisuje i dlaczego nie wywala mi zrzutu pamięci czy cos w tym stylu ?

Bo nie musi. Undefined behaviour. Nie każdy błąd jest wykrywany, bo miałoby to negatywny wpływ na wydajność programów w ogólności.
Trzeba się pilnować.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.