Tablice dynamiczne dwuwymiarowe - kilka pytań

0

Witam serdecznie. Mam kilka pytań odnośnie tablic dynamicznych dwuwymiarowych. Pierwsze z nich: jak wyłuskiwać wartość tablicy przez wskaźnik? Pan na lekcji wskazywał ten, poniższy sposób. Pojawia się jednak dziwny błąd z przydzielaniem adresu - dziwne tym bardziej, że wszystko wydaje się być dobrze.
Druga rzecz: Czy poniższy sposób uzyskiwania wartości dla tablic dwuwymiarowych poprzez wskaźnik jest jedynym, czy można wykorzystywać tradycyjny, dajmy na to tab[w][k]? (o ile się nie mylę, można jedynie dla tablic dynamicznych jednowymiarowych, ponieważ dwuwymiarowe są tworzone tylko w poniższy sposób - prosiłbym o weryfikację tych słów).
Ostatnia sprawa: jak zwalniać pamięć tablicy dwuwymiarowej? Utworzyłem poniższą funkcję deleted, ta jednak nie działa.
Bardzo prosiłbym o jak najszybszą pomoc. Serdecznie pozdrawiam :).

#include <iostream>
#include <ctime>
#include <cmath>
using namespace std;

void wyswietlTablice (int w, int k, double** tab)
{
	for (int i=0; i<w; i++)
		{
			for (int j=0; j<k; j++)
			{
				cout << (*(*(tab+i)+j)) << '\t';
			}
			cout << endl;
		}
}

void generujTablice (int w, int k, double** tab)
{
	for (int i=0; i<w; i++)
		{
			for (int j=0; j<k; j++)
			{
				(*(*(tab+i)+j)) = rand()%50;
			}
		}
}

void deleted (int w, double** tab)
{
	for (int i=0; i<w; w++)
	{
		delete[] tab[i];
	}
}

int main ()
{
	srand (time(NULL));

	double* *tab1 = new double *[2];

	generujTablice(2,3,tab1);
	wyswietlTablice(2,3,tab1);
	//deleted (2,tab);


	system ("pause");
	return 0;
}
 
0
double **tab=new double *[Y];
for(y=0;y<Y;++y) tab[y]=new double[X];
for(y=0;y<Y;++y) for(x=0;x<X;++x) tab[y][x]=rand%10;
for(y=0;y<Y;++y,cout<<endl) for(x=0;x<X;++x) cout<<tab[y][x]<<' ';
for(y=0;y<Y;++y) delete[] tab[y];
delete[] tab;
0
#include <iostream>
#include <ctime>
#include <cmath>
using namespace std;

void wyswietlTablice (int w, int k, double** tab)
{
	for (int i=0; i<w; i++)
		{
			for (int j=0; j<k; j++)
			{
				cout << tab[i][j] << '\t';
			}
			cout << endl;
		}
}

void generujTablice (int w, int k, double** tab)
{
	for(int i=0;i<w;++i)
	for(int j=0;j<k;++j)
	tab[i][j]=rand()%10;
}

void deleted (int w, double** tab)
{
	for (int i=0; i<w; ++i) 
	delete[] tab[i];
	delete[] tab;
}

int main ()
{
	srand (time(NULL));
	double* *tab1 = new double *[2];
	generujTablice(2,3,tab1);
	wyswietlTablice(2,3,tab1);
	deleted (2,tab1);

	system ("pause");
	return 0;
}

Zamieszczam kod. Niestety dalej nie działa i kompilator pokazuje błędy w momencie przypisywania wartości do tablicy. Prosiłbym także o odpowiedź na pozostałe pytania. Pozdrawiam.

0
_13th_Dragon napisał(a):
double **tab=new double *[Y];
for(y=0;y<Y;++y) tab[y]=new double[X];
for(y=0;y<Y;++y) for(x=0;x<X;++x) tab[y][x]=rand%10;
for(y=0;y<Y;++y,cout<<endl) for(x=0;x<X;++x) cout<<tab[y][x]<<' ';
for(y=0;y<Y;++y) delete[] tab[y];
delete[] tab;

Powiedz mi gdzie masz odpowiednik drugiego wiersza?

0

W porządku, dziękuję, teraz działa wszystko poprawnie. Proszę nadal o odpowiedź na pozostałe pytania. Pozdrawiam :).

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