• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

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

  • Автор темы 28111989
  • Дата начала
2

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;
 
L

lazybiz

Я несколько раз пересмотрел твой код, но так и не увидел ничего особенного. Как проявляет себя проблема?
 
2

28111989

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

lazybiz

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

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;
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!