Ошибка при выполнении с указателями

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Hup
Сообщения: 207
Зарегистрирован: 05 мар 2004, 05:31
Откуда: Владивосток
Контактная информация:

Такая ошибка возникает, когда...
1. Выходишь за пределы массива
2. Не удаляешь дин. массив в нужный момент
Здесь могут помочь, Exceptions... При условии, что дело совсем туго!!!
Усложнять - легко, упрощать - сложно
Absurd
Сообщения: 1228
Зарегистрирован: 26 фев 2004, 13:24
Откуда: Pietari, Venäjä
Контактная информация:

Первые элементы массивов у тебя - px1[0],px2[0],py1[0],py2[0]
Последние - px1[n-1],px2[n-1],py1[n-1],py2[n-1]
Проверь в дебаггере, чтобы всегда выполнялось 0<=j<=(n-1) .
2B OR NOT(2B) = FF
Аватара пользователя
AiK
Сообщения: 2287
Зарегистрирован: 13 фев 2004, 18:14
Откуда: СПб
Контактная информация:

Господа, а переведите-ка с Ц на русский вот это вот условие:
j<=*n+1
Absurd
Сообщения: 1228
Зарегистрирован: 26 фев 2004, 13:24
Откуда: Pietari, Venäjä
Контактная информация:

j меньше или равно чем (значение, расположеное по адресу, на который указывает n, увеличенное на единицу).
Криминал какой-то...
2B OR NOT(2B) = FF
Hup
Сообщения: 207
Зарегистрирован: 05 мар 2004, 05:31
Откуда: Владивосток
Контактная информация:

Замени
for (int j=1;j<=*n+1;j++)
на
for (int j=1;j<*n+1;j++)
, т.к. в массиве нет элемента с индексом j :)
Усложнять - легко, упрощать - сложно
Andy
Сообщения: 238
Зарегистрирован: 17 фев 2004, 08:15
Откуда: Минск

Исходный кусок кода НЕ будет работать.

Если n - целое, то непонятно условие j <=*n+1 - тут должно быть исключение
Если n - указатель на целое, то непонятно new int[n]

И вообще...
*provided AS IS
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

И вообще это была опечатка автора, наверное, господа. По той причине, что исходный код у него компилился. Единственная логическая ошибка - это манипулирование "паскалевскими" пределами массива (1..n) вместо "сишных" (0..n-1). Parasite, попробуй организовать цикл следующим образом:

Код: Выделить всё

for (i = 0; i < n; i++)
{
   ...
}
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
DeeJayC
Сообщения: 497
Зарегистрирован: 17 фев 2004, 11:26
Откуда: Ленинград (который Город на Неве)
Контактная информация:

Пиши:

Код: Выделить всё

int *px1 = new int[n+2],   *px2=  new int[n+2],
    *py1 = new int[n+2],   *py2 = new int[n+2];
Если цикл от 0 до n+1

Какого размера остальные массивы?
"Особое внимание начинающих аквариумистов хотим обратить на то, что рыбки никогда не спят на спинке!" (c)

viel spass, DeeJayC
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Верно, ошибка или при задании размеров массива или при задании границ массива при его прецеесинге, третьего не дано :)
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Ответить