|
|
|
Как найти ошибку?
|
|||
|---|---|---|---|
|
#18+
Вобщем не могу понять что и откуда берется. После окончания события вылазит "Invalid pointer operation" или вовсе крэш памяти. Все отрабатывает, отладчик все проглатывает, потреково все отлично, нигде не вылазят исключения, нет пустых данных, предпросмотр отчета отображается. После закрытия окна предпросмотра - ошибка. Думал дело в файле отчета, проверил, даже файл подменил другим. Ситуация не поменялась. Вот код обработчика: Код: pascal 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. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. Куда копать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2018, 13:02 |
|
||
|
Как найти ошибку?
|
|||
|---|---|---|---|
|
#18+
Валерий666, all[5] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2018, 13:04 |
|
||
|
Как найти ошибку?
|
|||
|---|---|---|---|
|
#18+
Валерий666SetLength(tmp_array, Form1.ZReport.RecordCount); У меня для тебя плохие новости: RecordCount не всегда возвращает реальное количество записей в Dataset-е. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2018, 13:04 |
|
||
|
Как найти ошибку?
|
|||
|---|---|---|---|
|
#18+
Валерий666 Код: pascal 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. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. Куда копать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2018, 13:07 |
|
||
|
Как найти ошибку?
|
|||
|---|---|---|---|
|
#18+
Хоть и есть ошибка в непонимание выделенного массива, то что элементы с нуля. Но, ошибка - "Invalid pointer operation" означает обращение к не выделенной памяти указателя. А неверное обращение к элементу должно расцениваться как Range check error ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2018, 13:18 |
|
||
|
Как найти ошибку?
|
|||
|---|---|---|---|
|
#18+
Информация о такой ошибки могла бы стать строка Код: pascal 1. В диалоговом окне, трудно нажать break ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2018, 13:20 |
|
||
|
Как найти ошибку?
|
|||
|---|---|---|---|
|
#18+
Живой пример, как не надо писать приложения. Элементы одной формы обращаются к элементам другой... Вынеси логику в отдельный от интерфейса пользователя модуль и делай все в нем. Потом ведь допиливать и поддерживать проще будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2018, 13:22 |
|
||
|
Как найти ошибку?
|
|||
|---|---|---|---|
|
#18+
авторfor i:=0 to length(tmp_array)-1 do лучше использовать Low и High ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2018, 13:24 |
|
||
|
Как найти ошибку?
|
|||
|---|---|---|---|
|
#18+
X11авторfor i:=0 to length(tmp_array)-1 do лучше использовать Low и High Чем лучше ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2018, 13:26 |
|
||
|
Как найти ошибку?
|
|||
|---|---|---|---|
|
#18+
defecator, при использовании Low и High границы массива нужно менять только в одном месте, ибо не все массивы начинаются с 0 )))) простейший пример: Array1: array[0..999] of Byte; for I := 0 to 999 do // при изменении описания массива здесь тоже нужно менять Array1[I] := 1; for I := Low(Array1) to High(Array1) do // при изменении описания массива здесь ничего менять не нужно Array1[I] := 1; а еще вспоминаем кроссплатформенность)) Хотя кому я говорю, ты даже до древнейшей D7 не заапгрейдился) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2018, 13:38 |
|
||
|
Как найти ошибку?
|
|||
|---|---|---|---|
|
#18+
defecatorX11пропущено... лучше использовать Low и High Чем лучше ? чем от 0 до -1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2018, 13:40 |
|
||
|
Как найти ошибку?
|
|||
|---|---|---|---|
|
#18+
А если массив начинается не 0 или даже не 1? Var X: array[3..10] of Integer; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2018, 13:42 |
|
||
|
Как найти ошибку?
|
|||
|---|---|---|---|
|
#18+
Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. Если в объявлении массива поменять [3..10] на [5..18], например, то в объявлении цикла ничего менять не придётся ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2018, 13:44 |
|
||
|
Как найти ошибку?
|
|||
|---|---|---|---|
|
#18+
ГирлионайльдоНо, ошибка - "Invalid pointer operation" означает обращение к не выделенной памяти указателя.Нет. Она означает повреждение служебной памяти. Например префикса массива ГирлионайльдоА неверное обращение к элементу должно расцениваться как Range check errorПри включенной проверке Range check ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2018, 13:57 |
|
||
|
Как найти ошибку?
|
|||
|---|---|---|---|
|
#18+
asviridenkovВалерий666, all[5] Спасибо! Глаз замылился... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2018, 14:07 |
|
||
|
Как найти ошибку?
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovВалерий666SetLength(tmp_array, Form1.ZReport.RecordCount); У меня для тебя плохие новости: RecordCount не всегда возвращает реальное количество записей в Dataset-е. Это зависит от их количества? Скажем до 10000 я проблем таких не видел ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2018, 14:09 |
|
||
|
Как найти ошибку?
|
|||
|---|---|---|---|
|
#18+
Валерий666Это зависит от их количества? Это зависит от особенностей реализации конкретного класса. И, кстати, ты уверен, что у тебя все запросы возвращают одинаковое количество записей?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2018, 14:17 |
|
||
|
Как найти ошибку?
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovВалерий666Это зависит от их количества? Это зависит от особенностей реализации конкретного класса. И, кстати, ты уверен, что у тебя все запросы возвращают одинаковое количество записей?.. Имеется ввиду разные или один и то же выполненный 1000 раз? Пока база не большая 20 записей, все проверяемо и отображается правильно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2018, 14:21 |
|
||
|
Как найти ошибку?
|
|||
|---|---|---|---|
|
#18+
Валерий666Пока база не большая 20 записей, все проверяемо и отображается правильно.Короче : "Сегодня детских не завезли". Все еще впереди. Если датасет еще не сфетчил все записи, а транзакция ридкоммиитед, то... дальше сам или еще что-то нужно пояснять? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2018, 14:41 |
|
||
|
Как найти ошибку?
|
|||
|---|---|---|---|
|
#18+
Валерий666Имеется ввиду разные или один и то же выполненный 1000 раз? Мне отсюда не видно что делает процедура GetInfoRepSQL(), но я сильно подозреваю, что она меняет содержимое Form1.ZReport и это содержимое может уже не поместиться в массив, выделенный под старое количество RecordCount. Валерий666Пока база не большая 20 записей, все проверяемо и отображается правильно. 20 записей? А что тогда заносится в theme_array с 20-го по 27-й номер?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2018, 14:42 |
|
||
|
Как найти ошибку?
|
|||
|---|---|---|---|
|
#18+
авторА если массив начинается не 0 или даже не 1? В этом случае Low и High не помогут. Проверял на D2010. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2018, 14:50 |
|
||
|
Как найти ошибку?
|
|||
|---|---|---|---|
|
#18+
asutp2defecator, при использовании Low и High границы массива нужно менять только в одном месте, ибо не все массивы начинаются с 0 )))) простейший пример: Array1: array[0..999] of Byte; for I := 0 to 999 do // при изменении описания массива здесь тоже нужно менять Array1[I] := 1; for I := Low(Array1) to High(Array1) do // при изменении описания массива здесь ничего менять не нужно Array1[I] := 1; а еще вспоминаем кроссплатформенность)) а ещё можно завести константы, определяющие размерность массива, и использовать только их (как раз мой вариант) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2018, 14:58 |
|
||
|
Как найти ошибку?
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_Нет. Она означает повреждение служебной памяти. Например префикса массива Доказательства в студию! Если бы так было, то выскочила ошибка AV подобная 'write of address 0xXXXXXXXX' ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2018, 15:32 |
|
||
|
Как найти ошибку?
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_При включенной проверке Range check А вот и нет. Она у меня выскакивает даже при выключенной Код: pascal 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. 26. 27. 28. 29. 30. 31. 32. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2018, 15:37 |
|
||
|
Как найти ошибку?
|
|||
|---|---|---|---|
|
#18+
ГирлионайльдоА вот и нет. Она у меня выскакивает даже при выключенной Код: pascal 1. 2. 3. 4. 5. 6. 7. При подключенном FastMM на выходе из процедуры FastMM ругается на поврежденный футер блока. При отсутствии FastMM на закрытие программы начинаются сыпаться произвольные ошибки. Если добавить Код: pascal 1. то на строке Код: pascal 1. ожидаемый --------------------------- Debugger Exception Notification --------------------------- Project Project1.exe raised exception class ERangeError with message 'Range check error'. --------------------------- Break Continue Help --------------------------- ГирлионайльдоДоказательства в студию!SysUtils.pas Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. поискать по исходникам строку reInvalidPtr - задание на дом ГирлионайльдоЕсли бы так было, то выскочила ошибка AV подобная 'write of address 0xXXXXXXXX'Чушь! Вот именно эта ошибка обозначает обращение к невыделенной (или освобожденной) памяти ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2018, 18:07 |
|
||
|
|

start [/forum/topic.php?fid=58&fpage=96&tid=2040387]: |
0ms |
get settings: |
6ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
42ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
42ms |
get tp. blocked users: |
1ms |
| others: | 204ms |
| total: | 324ms |

| 0 / 0 |
