Dwuwymiarowa dynamiczna tablica Editów

0

Witam. Mam problem z dwuwymiarową tablicą dynamiczną Editów. Tablica na formie tworzy się poprawnie. Kod:

        TEdit **TabEdit;

        int t = 150;
        int l = 80;
        int n = StrToInt(Edit1->Text);
        int m = StrToInt(Edit2->Text);
        TabEdit = new TEdit *[n];
        for(int i = 0; i < n; i++)
        {
                 for(int j = 0; j < m; j++)
                {
                        TabEdit[i] = new TEdit(this);
                        TabEdit[i]->Name = "T" + IntToStr(i) + IntToStr(j);
                        TabEdit[i]->Top = t;
                        TabEdit[i]->Left = l + j * 40;
                        TabEdit[i]->Width = 40;
                        TabEdit[i]->Text = "0";
                        TabEdit[i]->Parent = this;
                }
                t += 30;
                l = 80;
        }

Chcę w kolejnej funkcji wylosować wartości i umieścić w wygenerowanych Editach i tu wyskakuje mi błąd:

        int n = StrToInt(Edit1->Text);
        int m = StrToInt(Edit2->Text);
        for (int i = 0; i < n; i++)
                for (int j = 0; j < m; j++)
                TabEdit[i][j]->Text = IntToStr(rand()%100);

Pozdrawiam

0

czym jest TabEdit w tej nowej funkcji

jak wywolujesz ta nowa funkcje

jaki blad?

0

Tworzy mi się 2-wymiarowa tablica Editów na formie. Chcę by dane w niej zawarte tworzyły dwuwymiarową tablicę Text'ów z poszczególnych Editów (aby dostęp był przez 2 indeksy i oraz j). Wcześniej miałem 1-wymiarową i wszystko działało ale dostęp był przez jeden index i (choć na formie była wyświetlana w postaci 2-wymiarowej).

0
edan_ napisał(a):

Witam. Mam problem z dwuwymiarową tablicą dynamiczną Editów. Tablica na formie tworzy się poprawnie. Kod:


TEdit **TabEdit;
   [...]

Masz jednowymiarową tablicę wskaźników

> Chcę w kolejnej funkcji wylosować wartości i umieścić w wygenerowanych Editach i tu wyskakuje mi błąd:
> 
    int n = StrToInt(Edit1->Text);
    int m = StrToInt(Edit2->Text);
    for (int i = 0; i < n; i++)
            for (int j = 0; j < m; j++)
            TabEdit[i][j]->Text = IntToStr(rand()%100);


Nic dziwnego - masz źle napisany kod.
0

Wyciek pamięci (i możliwe źródło błędu, którego nie podałeś):

for(int i = 0; i < n; i++)
{
    for(int j = 0; j < m; j++)
    {
        TabEdit[i] = new TEdit(this);

m razy wywołujesz TabEdit[i] = new TEdit(this);.
Co to jest m? Po co ta wewnętrzna pętla?

0

Czyli, jak rozumiem, mam wygenerować 2-wymiarową tablicę wskaźników? Jak to zrobić?

0

pokaz CALY kod

0
edan_ napisał(a):

Czyli, jak rozumiem, mam wygenerować 2-wymiarową tablicę wskaźników? Jak to zrobić?

Trochę wróżąc to pewnie coś w ten deseń:

for(int i = 0; i < n; i++)
{
    TabEdit[i] = new TEdit[m];
    for(int j = 0; j < m; j++)
    {
        //TabEdit[i] = new TEdit(this);     <-- wyciąć
        TabEdit[i][j]->Name = "T" + IntToStr(i) + IntToStr(j);
        TabEdit[i][j]->Top = t;
        ...
0
edan_ napisał(a):

Czyli, jak rozumiem, mam wygenerować 2-wymiarową tablicę wskaźników? Jak to zrobić?

Tak

Zrobić to można na kilka sposobów.
może to być:

TEdit ***TabEdit;

może być:

vector<vector<TEdit *> > TabEdit;

kwestia jak będziemy dalej chcieli postępować, jeśli tak jak w Twoim wypadku, to pierwszy sposób z dodatkowymi poprawkami

        TabEdit = new TEdit **[n];
        for(int i = 0; i < n; i++)
        {

                TabEdit[i] = new TEdit *[m];
                for(int j = 0; j < m; j++)
                {
                        TabEdit[i][j] = new TEdit(this);
                        TabEdit[i][j]->Name = "T" + IntToStr(i) + IntToStr(j);
                        [..]
                }
                [..]
        }

Oczywiście potem ładnie zwolnic pamięć należy.

1
kaczus napisał(a):
edan_ napisał(a):

Czyli, jak rozumiem, mam wygenerować 2-wymiarową tablicę wskaźników? Jak to zrobić?

Tak

Zrobić to można na kilka sposobów.
może to być:

TEdit ***TabEdit;

Nie. Potrzebna jest dwuwymiarowa tablica elementów, nie wskaźników.

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