3 Динамических Массива И Проблемы С Ними

Тема в разделе "Общие вопросы по С и С++", создана пользователем 28111989, 13 дек 2011.

  1. 28111989

    28111989 Гость

    пишу програмку перевод из матрицы смежности в матрицу изоморфности и наоборот. Столкнулся с такой проблемой: при введении 3его динамического массива начинаются проблемы со вторым (он 6*2) он становится одномерным (не могу получить доступ ко второй колонке), может и с первым тоже проблемы были бы не пробовал, при не использовании 3его всё работает нормально.Никак не могу понять в чём проблема
    Код (C++):
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    int i,j,**inp;
    inp=new int*[SpinEdit1->Value];
    for (i=0;i<SpinEdit1->Value;i++)
    inp[i]=new int[SpinEdit1->Value];
    int reb=0;
    for (i=0;i<SpinEdit1->Value;i++)
    for (j=0;j<SpinEdit1->Value;j++)
    if (StringGrid1->Cells[j][i]!="1") StringGrid1->Cells[j][i]=IntToStr(0);
    for (i=0;i<SpinEdit1->Value;i++)
    for (j=0;j<SpinEdit1->Value;j++)
    {
    inp[i][j]=StrToInt(StringGrid1->Cells[j][i]);
    if (inp[i][j]==1) reb++;
    }
    int tmp=0,l2=0;
    for (j=0;j<SpinEdit1->Value;j++)
    {
    for (i=0;i<SpinEdit1->Value;i++)
    if (inp[i][j]==1) tmp++;
    if (l2<tmp) l2=tmp;
    tmp=0;
    }
    int **mas2;
    mas2=new int*[SpinEdit1->Value];
    for (i=0;i<SpinEdit1->Value;i++)
    mas2[i]=new int[l2];
    int kn=0;
    tmp=0;
    for (i=0;i<SpinEdit1->Value;i++)
    {
    for (j=0;j<SpinEdit1->Value;j++)
    if (inp[i][j]==1)
    {
    mas2[i][tmp]=j+1;
    tmp++;
    }
    if (tmp>kn) kn=tmp;
    tmp=0;
    }
    tmp=0;
    int *mas3=new int[reb];
    for (j=0;j<kn;j++)
    for (i=0;i<SpinEdit1->Value;i++)
    if (mas2[i][j]!=NULL)
    {
    mas3[tmp]=mas2[i][j]*10+tmp+1;
    tmp++;
    }
    ShowMessage(IntToStr(mas3[0]));
    ShowMessage(IntToStr(mas3[1]));
    ShowMessage(IntToStr(mas3[2]));
    ShowMessage(IntToStr(mas3[3]));
    ShowMessage(IntToStr(mas3[4]));
    ShowMessage(IntToStr(mas3[5]));
    ShowMessage(IntToStr(mas3[6]));
    //-----------
    for (i=0;i<SpinEdit1->Value;i++)
    delete inp[i];
    delete [] inp;
    for (i=0;i<l2;i++)
    delete mas2[i];
    delete [] mas2;
    delete [] mas3;
     
  2. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    Я несколько раз пересмотрел твой код, но так и не увидел ничего особенного. Как проявляет себя проблема?
     
  3. 28111989

    28111989 Гость

    куда-то пропали сообщения :blush:
    проблема в том что после введения третьего массива (mas3) второй массив (mas2) становится одномерным (не могу получить доступ ко второму столбцу и удаление в конце тоже ругается), не понимаю почему так. если третий не вводить то всё работает нормально.
     
  4. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    Как ты говоришь, у тебя размер массива mas2 равен 6х2, в этой строке l2 = 2: mas2=new int[l2];
    Но вот здесь: mas2[tmp]=j+1; tmp выходит за пределы этой 2-ки.
     
  5. 28111989

    28111989 Гость

    тут нужно немного объяснить код, l2 - это максимальное количество единичек в ряду (в примере это 2), значи в цикле for (j=0;j<SpinEdit1->Value;j++) условие if (inp[j]==1) выполнится не более 2х раз и не вызовет ошибку, так и проблема возникает вот тут mas3[tmp]=mas2[j]*10+tmp+1; и тут for (i=0;i<l2;i++) delete mas2;
     
Загрузка...

Поделиться этой страницей