Rozmiar tablicy dynamicznej

2014-03-06 20:15
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 ?
#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;
}

Pozostało 580 znaków

2014-03-06 20:20
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.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

2014-03-06 22:18
0

@misiek123 zobacz sobie coś takiego:

#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? ;)


Masz problem? Pisz na forum, nie do mnie. Nie masz problemów? Kup komputer...

Pozostało 580 znaków

2014-03-07 10:19
gośćabc
2014-03-07 12:08
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ć.

edytowany 1x, ostatnio: Azarien, 2014-03-07 12:08

Pozostało 580 znaków

Liczba odpowiedzi na stronę

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