Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
55 / 18 / 19
Регистрация: 11.11.2014
Сообщений: 463

Странная ошибка с динамическим массивом

24.11.2016, 00:36. Показов 746. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
час поиска ошибки и столько же пытался решить. В общем:
Создаю массивы динамически
C++
1
2
3
4
float *x = new float;
float *y = new float;
float *dx = new float;
float *dy = new float;
Заполняю их по нажатию в кнопке.
C++
1
2
3
4
 x[k]=random(ClientWidth);
  y[k]=random(ClientHeight);
  dx[k]=x[k]-I->Left;
  dy[k]=y[k]-I->Top;
В самом конце k увеличивается на 1, изначально =0 .
И в общем в чём вся суть. Нажимаю на кнопку создаётся динамически Image. x и y рандомная точка на форме, dx dy в дальнейшем считает приращение для движения, а в данном коде разницу между рандом точкой и нашим Image(но не суть тут могут быть любые цифры).
Всё работает, если не отлично, то хоть как-то, по крайне мере с первыми 3-мя созданными Image, дальше есть непонятные проблемы, но это менее важно.
И вот то к чему я всё это ввёл. Когда я закрываю программу, при k=0,1,3,4,5 и тд всё отлично закрывается, но если k=2,то закрывается с ошибкой invalid pointer operation. В чём? Где тут ошибка? Я полностью комментировал весь код, чтобы найти где ошибка и вот. А в чём вообще проблемы не знаю.
Вот код, который не закоменчен:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
if (Key==32){
TImage *I= new TImage(this);
I->Picture->LoadFromFile("pauk.gif");
  I->Left=a;
  I->Top=b;
  I->Width=135;
  I->Height=102;
  I->Parent = Form1;
  I->Name="Image"+IntToStr(k);
  I->Proportional=true;
 
/*  int *x = new int[k+1];
  int *y = new int[k+1];
  int *dx = new int[k+1];
  int *dy = new int[k+1];*/
 
  x[k]=random(ClientWidth);
  y[k]=random(ClientHeight);
  dx[k]=x[k]-I->Left;
  dy[k]=y[k]-I->Top;
  dvizh(k);
 
  TDvizh->Enabled=true;
  k++;
  }
Добавлено через 9 минут
И если можно, то объясните почему ошибка именно при k==2.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.11.2016, 00:36
Ответы с готовыми решениями:

Работа с динамическим массивом кнопок
Помогите советом! Имеется динамический массив кнопок: const int i=50, j=30; TBitBtn *MyButton; Он создается во время...

Разработка стека, представленного динамическим массивом
Здравствуйте! Нужно разработать стек, представленный динамическим массивом хранимых объектов для дальнейшей обработки. сам в билдере лузер....

Ошибка в программе с динамическим массивом
Добрый вечер. Сегодня взялся за дин. масивы, нашел пример: #include <stdio.h> #include <math.h> #include <alloc.h> ...

8
55 / 18 / 19
Регистрация: 11.11.2014
Сообщений: 463
24.11.2016, 08:43  [ТС]
Никто не знает? Вот проект, может более понятно будет.
https://www.cyberforum.ru/atta... 1479966188
Вложения
Тип файла: rar Паучки.rar (801.4 Кб, 7 просмотров)
0
 Аватар для Lelik-pahan
1709 / 905 / 207
Регистрация: 25.11.2009
Сообщений: 1,850
24.11.2016, 10:57
Цитата Сообщение от Александр321321 Посмотреть сообщение
Создаю массивы динамически
Ты создаёшь не массивы, а переменные. При создании массива нужно указать его размер, чтобы выделить память подо все его элементы.
0
55 / 18 / 19
Регистрация: 11.11.2014
Сообщений: 463
24.11.2016, 18:27  [ТС]
ну там есть закоменченная часть кода, но она не сильно мне помогла. Просто у меня массив меняется с нажатием клавиши. Т.е не известно сколько будет элементов
C++
1
2
3
4
int *x = new int[k+1];
  int *y = new int[k+1];
  int *dx = new int[k+1];
  int *dy = new int[k+1];
0
279 / 156 / 52
Регистрация: 30.06.2011
Сообщений: 1,712
24.11.2016, 20:30
Александр321321, массив каждый раз меняет свой размер? Используйте std::vector тогда.
0
55 / 18 / 19
Регистрация: 11.11.2014
Сообщений: 463
24.11.2016, 21:27  [ТС]
Ну хорошо. Но дело в том, что у меня 4 массива, одного размера, но ошибка почему-то именно в dx dy, а x y работают на отлично. Должно же быть объяснение этому.
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
24.11.2016, 23:05
Нам нужно что объяснять почему у тебя руки-крюки?

Хочешь что бы помогли приведи свой код в порядок, и приведи ту его часть где происходит ошибка.
0
55 / 18 / 19
Регистрация: 11.11.2014
Сообщений: 463
25.11.2016, 00:36  [ТС]
Ну я сверху вроде бы скинул в чём проблема.
ну ок ещё раз.
есть 4 массива созданных одинаково
C++
1
2
3
4
float *x = new float;
float *y = new float;
float *dx = new float;
float *dy = new floaat;
И вот где я их заполняю по нажатию клавиши при начальном k=0
[CPP]
C++
1
2
3
4
5
x[k]=random(ClientWidth);
  y[k]=random(ClientHeight);
  dx[k]=x[k]-I->Left;
  dy[k]=y[k]-I->Top;
  k++;
Ошибка пояляется(выход за пределы массива) именно при k=2 и именно в dx и dy и именно после закрытия программы. Если закрою программы при k>3 и K<2, то всё норм.
Вот весь код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
if (Key==32){
TImage *I= new TImage(this);
I->Picture->LoadFromFile("pauk.gif");
  I->Left=a;
  I->Top=b;
  I->Width=135;
  I->Height=102;
  I->Parent = Form1;
  I->Name="Image"+IntToStr(k);
  I->Proportional=true;
 
/*  int *x = new int[k+1];
  int *y = new int[k+1];
  int *dx = new int[k+1];
  int *dy = new int[k+1];*/
 
  x[k]=random(ClientWidth);
  y[k]=random(ClientHeight);
  dx[k]=x[k]-I->Left;
  dy[k]=y[k]-I->Top;
  dvizh(k);
 
  TDvizh->Enabled=true;
  k++;
  }
Этого мало? Описал всё как есть. Каким образом мне код приводить в порядок, если там и так всё в порядке. На dvizh внимание не обращайте, там ничего нет
0
11 / 11 / 4
Регистрация: 15.04.2015
Сообщений: 67
25.11.2016, 01:25
А где в программе очистка памяти динамически созданных массивов?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.11.2016, 01:25
Помогаю со студенческими работами здесь

Ошибка в функции с динамическим массивом
Данный код у меня выдаёт ошибку :Необработанное исключение в &quot;0x01281d09&quot; в &quot;Chernovick.exe&quot;: 0xC0000005: Нарушение прав доступа при...

Ошибка связанная с Динамическим массивом
#include &lt;iostream&gt; #include &lt;cstring&gt; int main() { using namespace std; char * ch = new char; cin &gt;&gt; ch; for (int i = 1; i...

Ошибка структуры с динамическим массивом
Описал структуру, содержащую динамический массив. По сути получился динамический массив динамических массивов: main() { int...

Проблема с динамическим массивом (ошибка в коде)
Эта программа должна при нажатии на кнопку &quot;выбрать файл&quot; открывать CommonDialog.ShowSave и потом при выборе из комбобокса номера строки и...

Ошибка при работе с динамическим массивом
ошибка heap corruption detected: after normal block &quot;#355&quot; Ситуация такая, научился работать с динамическим массивом, чтение, вывод на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
1С: Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru