• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Rozszerzenie tablic c++

42 Warsaw Coding Academy
0 głosów
1,268 wizyt
pytanie zadane 19 listopada 2016 w C i C++ przez T.Żurawski Początkujący (290 p.)

Witam,

Mam problem z pamięciom, mianowicie program tworzy 2 wymiarowa tablice o zadanych wielkościach, ale przy pewnym założeniu musi ją powiększyć. Dlatego używam delate [] i próbuje stworzyć nową większą, ale niestety wyrzuca mi błąd. Proszę pomoc.


    int o;
    o=z;
    int*   profil1=new int[o];
    int*   profil2=new int[o];
    double** wsk= new double*[o];

    for(int i=0; i<o; i++)
        wsk[i]=new double[85];
//rozpoczyna się petla ktora sobie coś tam liczy
do{
bool mach=false;

        for(int i=0; i<z; i++)
        {
            if ((wsk[i][75]>0.85)||(wsk[i][76]>0.85))
              mach=true;
        }
        if (mach==true)
        {

            for(int i=0;i<o;i++)
            delete [] wsk[i]

           delete [] wsk;
           delete [] profil1;
           delete [] profil2;
    o=z;
    int*   profil1=new int[o];
    int*   profil2=new int[o];
    double** wsk= new double*[o];

    for(int i=0; i<o; i++)
        wsk[i]=new double[85];
}while(...)

 

1 odpowiedź

0 głosów
odpowiedź 19 listopada 2016 przez Knayder Nałogowiec (37,640 p.)
Skoro chcesz mieć tablicę która będzie miała niesprecyzowaną wielkość, to dlaczego nie użyjesz wektora?
komentarz 19 listopada 2016 przez T.Żurawski Początkujący (290 p.)
Problem polega na tym że przerabiam stary kod w którym nie zakładałem takiej możliwości. Teraz chcąc to przerobić i kombinowałem w tę stronę.
komentarz 19 listopada 2016 przez Knayder Nałogowiec (37,640 p.)

Ale jeżeli nie chcesz się bawić w vector, to możesz to zrobić tak:
 

int *tab = new int[20];
delete[] tab;
int *tab = new int[50];

 

komentarz 19 listopada 2016 przez T.Żurawski Początkujący (290 p.)

Tak tylko gdzieś w tym kodzie u mnie jest błąd.. W twoim przykładzie jest wskaźnik na jednowymiarowa tablice, a u mnie jest wskaźnik na wskaźniki czyli 2 wymiarowa i podejrzewam że w tym jest pies pogrzebany.

komentarz 19 listopada 2016 przez Knayder Nałogowiec (37,640 p.)
#include <iostream>
using namespace std;
int main() {
	int a = 7, b = 4, newA=8, newB=5;
	int **tab = new int*[a];
	for (int i = 0; i < a; i++)
		tab[i] = new int[b];
	for (int i = 0; i < a; i++) {
		for (int j = 0; j < b; j++)
		{
			tab[i][j] = i + j;
			cout << tab[i][j] << " ";
		}
		cout << '\n';
	}
	cout << '\n';
	for (int i = 0; i < a; i++)
		delete[] tab[i];
	delete[]tab;
	//NEW ARRAY
	a = newA;
	b = newB;
	tab = new int*[a];
	for (int i = 0; i < a; i++)
		tab[i] = new int[b];
	for (int i = 0; i < a; i++) {
		for (int j = 0; j < b; j++)
		{
			tab[i][j] = i + j;
			cout << tab[i][j] << " ";
		}
		cout << '\n';
	}


	cin.ignore();
	cin.get();
}

Zrób nowy projekt i pokombinuj czemu ci to nie działa.
Wyżej dałem kod który działa jak najbardziej poprawnie :)

komentarz 19 listopada 2016 przez T.Żurawski Początkujący (290 p.)
Przykład się przydał, dzięki wielkie!!! Przy zmianie wielkości ponownie deklarowałem double** wsk. Wystarczyło usunąć deklaracje i hasa jak mała sarenka. Jeszcze raz wielkie dzięki.
komentarz 19 listopada 2016 przez Knayder Nałogowiec (37,640 p.)
Miło że mogłem pomóc.
Polecam taki sposób rozwiązywania problemów. Zrobić nowy projekt, albo mieć takowy do tego typu testów.

93,377 zapytań

142,379 odpowiedzi

322,528 komentarzy

62,726 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...