Ошибка invalid pointer operation как исправить

0 / 0 / 0

Регистрация: 05.11.2016

Сообщений: 31

1

15.03.2017, 18:15. Показов 24292. Ответов 14


Студворк — интернет-сервис помощи студентам

Создаю проект. Самый обычный.
2 формы, текст, пару кнопок.
И ни с того, ни с сего ошибка “invalid pointer operation”.
Пробовала пересоздавать проект, несколько раз. И всё равно в разные моменты работы возникает эта ошибка.
Знаю, что много таких тем, но я не нашла решения для своего проекта.



0



5535 / 4320 / 1383

Регистрация: 14.04.2014

Сообщений: 19,357

Записей в блоге: 19

15.03.2017, 22:34

2

ошибка в проекте
проект у вас
пока ничего не изменится, так и будет



0



0 / 0 / 0

Регистрация: 05.11.2016

Сообщений: 31

15.03.2017, 23:06

 [ТС]

3

Не совсем поняла “пока ничего не изменится”.
Программа в архиве.



0



пофигист широкого профиля

4657 / 3092 / 854

Регистрация: 15.07.2013

Сообщений: 17,819

16.03.2017, 01:53

4

Цитата
Сообщение от Yumi_Mills
Посмотреть сообщение

Программа в архиве.

А она не компилируется. Не хватает модуля ChangePassword



0



0 / 0 / 0

Регистрация: 05.11.2016

Сообщений: 31

16.03.2017, 01:56

 [ТС]

5

Да, извиняюсь, не тот вариант работы отправила.
Вот этот запускается.



0



пофигист широкого профиля

4657 / 3092 / 854

Регистрация: 15.07.2013

Сообщений: 17,819

16.03.2017, 02:44

6

Цитата
Сообщение от Yumi_Mills
Посмотреть сообщение

Вот этот запускается.

Увы. Он тоже не запускается. Ибо не находит файлы Data.DB, Data.Win.ADODB.

Не по теме:

Какой мусор и с какой помойки вы нам предлагаете?



0



5535 / 4320 / 1383

Регистрация: 14.04.2014

Сообщений: 19,357

Записей в блоге: 19

16.03.2017, 09:15

7

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



0



0 / 0 / 0

Регистрация: 05.11.2016

Сообщений: 31

16.03.2017, 19:37

 [ТС]

8

Ошибка появляется в разные моменты работы (именно с незапущенным приложением). Иногда это добавление элемента, иногда изменение св-в элемента, а иногда и просто так (допустим оставить открытым программу на некоторое время).
Если определённое кол-во раз нажимать ОК в ошибке “Invalid pointer operation”, то появляется другая (3 скрин и ей подобные) и т.д.
Если закрыть ошибку крестиком, она пропадает, но появляется опять, когда курсор мыши попадает в область формы.
Один раз появилась вообще “косая” ошибка — 2 скрин.
Пробовала и новые проекты делать, ситуация аналогичная.
Так же переустанавливала саму программу: сначала была RAD Studio 10, потом две версии RAD Studio XE7. Всё равно ошибка.
Возможно ли, что влияет то, что программа установлена не на диске С или какой-то конфликт с Delphi 7 (она тоже есть на ПК и тоже не на диске С)?
ОС: Windows 10 Pro.



0



0 / 0 / 0

Регистрация: 05.11.2016

Сообщений: 31

16.03.2017, 19:44

 [ТС]

9

Цитата
Сообщение от northener
Посмотреть сообщение

Какой мусор и с какой помойки вы нам предлагаете?

Это как бы начало моего диплома.

Цитата
Сообщение от northener
Посмотреть сообщение

Ибо не находит файлы Data.DB, Data.Win.ADODB.

Запускается не в Delphi, а в RAD Studio.



0



5535 / 4320 / 1383

Регистрация: 14.04.2014

Сообщений: 19,357

Записей в блоге: 19

16.03.2017, 21:24

10

так у вас программа к ошибке никакого отношения не имеет
ошибка при работе в IDE?

возможно какие-то компоненты у вас стоят кривые

при переустановке нужно полностью удалять следы предыдущих версий
простой uninstall оставляет за собой тучу барахла
ну и рекомендую не использовать папку по умолчанию с путем длиной в километр, что-нить скромное c:d10



0



0 / 0 / 0

Регистрация: 05.11.2016

Сообщений: 31

16.03.2017, 22:13

 [ТС]

11

Цитата
Сообщение от krapotkin
Посмотреть сообщение

простой uninstall оставляет за собой тучу барахла

Я удаляла через панель управления. Это тоже не подходит?

Советуете опять переустановить студию?



0



500 / 346 / 200

Регистрация: 20.10.2016

Сообщений: 1,101

16.03.2017, 22:46

12

Цитата
Сообщение от Yumi_Mills
Посмотреть сообщение

Возможно ли, что влияет то, что программа установлена не на диске С или какой-то конфликт с Delphi 7 (она тоже есть на ПК и тоже не на диске С)?

У меня на D стоит 10.1 Berlin на С D7, это на работоспособность IDE никак не влияет.

Цитата
Сообщение от Yumi_Mills
Посмотреть сообщение

Советуете опять переустановить студию?

Пробуйте, только по новым путям/каталогам.



0



0 / 0 / 0

Регистрация: 05.11.2016

Сообщений: 31

16.03.2017, 23:05

 [ТС]

13

Цитата
Сообщение от TFullControl
Посмотреть сообщение

Пробуйте, только по новым путям/каталогам.

А удалять эту как? Через панель управления норм или какое-то стороннее ПО скачать?



0



5535 / 4320 / 1383

Регистрация: 14.04.2014

Сообщений: 19,357

Записей в блоге: 19

17.03.2017, 00:40

14

здесь на форуме советовали RevoUninstaller
сам не пробовал



0



1436 / 1013 / 228

Регистрация: 31.05.2013

Сообщений: 6,645

Записей в блоге: 6

17.03.2017, 00:51

15

Цитата
Сообщение от krapotkin
Посмотреть сообщение

здесь на форуме советовали RevoUninstaller

Я им и удалял. Потом заходил в папки ProgramFiles, AppData, ProgramData, и дочищал следы, если оставались.

Добавлено через 2 минуты

Цитата
Сообщение от Yumi_Mills
Посмотреть сообщение

или какой-то конфликт с Delphi 7

По умолчанию D7 устанавливается в папку Borland в ProgramFiles, а новые версии XExx – в папку Embarcadero в ProgramFiles. Они между собой никак не связаны.



0




VitGun © ( 2004-11-19 19:30 ) [0]

Проблема вот в чем. При закрытии программы вываливается сообщение “Invalid pointer operation”.
В программе есть динамический массив. Если не задавать ему длину и не создавать его элементы, то прога
закрывается нармально, но если создать, то “Invalid pointer operation”. В собыии OnClose главной формы написал

где:
cap:array of real;

Прочитал в одной статье, что так массивы уничтожаються (aka Dispose для указателей в Pascal), но нифига не
помогает. что я не сделал? Где руки выпрямлять?


wicked © ( 2004-11-19 19:47 ) [1]

а зачем ему nil присваивать. он и сам уничтожится.


GLFox ( 2004-11-19 20:07 ) [2]

SetLength(YourDynamicArray,0);


VitGun © ( 2004-11-19 20:07 ) [3]

2 wicked
Нифига. хоть присваивай nil, хоть не присваивай. все равно “Invalid pointer operation”


VitGun © ( 2004-11-19 20:10 ) [4]

2 GLFox и это тож пробовал. те же яйца только в профиль.


GLFox ( 2004-11-19 20:12 ) [5]

А еще какие поинтеры используешь?


VitGun © ( 2004-11-19 20:19 ) [6]

Никаких. в том то и дело. Это единственный DynamicArray во всей проге.


Anatoly Podgoretsky © ( 2004-11-19 20:20 ) [7]

У тебя ошибка в программе.


VitGun © ( 2004-11-19 20:22 ) [8]

2 Anatoly Podgoretsky. Угу. Я догадался. вопрос в другом. где?
Если динаические массивы не использовать, то все ОК, если использовать — то трабл.


DrPass © ( 2004-11-19 20:27 ) [9]


> Если динаические массивы не использовать,

Второй наводящий вопрос: а как ты их используешь?

.
Setlength(cap,len);
.
где len — некоторая переменная типа integer
.
for i:=0 to len do
begin
cap[i]:=something;
end;
.


begin. end © ( 2004-11-19 20:40 ) [11]


> [10] VitGun © (19.11.04 20:39)

Ну вот видишь, как всё просто оказалось, всего-то надо заменить len на len — 1 (в заголовке цикла).


Anatoly Podgoretsky © ( 2004-11-19 20:41 ) [12]

VitGun © (19.11.04 20:22) [8]
Да, да именно так, ошибка при работе с динамическими массивами, вот теперь когда способился привести хоть чуть кода, то это уже стало не предположением, а истиной. Ты выходишь за пределы массива, а контроль за этим явно отключил.
Для начала срочно в настройки компилятор, проштудировать их и до тех пор ни строчки кода или же пиши без ошибок.


Anatoly Podgoretsky © ( 2004-11-19 20:43 ) [13]

begin. end © (19.11.04 20:40) [11]
Ну сдесь исправит, так в другом месте вылезет, надо не заплатки, а как минимум включить контроль за границами.


Anatoly Podgoretsky © ( 2004-11-19 20:45 ) [14]

Сделай для начала так
SetLength(,2) затем на бумажке пишешь, вручную прокручивая цикл
I = ?
..
I = ?

и считаешь количество строк, затем сравниваешь с количеством строк массиса


begin. end © ( 2004-11-19 20:45 ) [15]


> [13] Anatoly Podgoretsky © (19.11.04 20:43)

Ну это само собой, а также, ИМХО, лучше пользоваться в таких случаях не конкретной переменной, а High(cap).


VitGun © ( 2004-11-19 20:47 ) [16]

2 Anatoly Podgoretsky

Уж извините..нет. За пределы массива я не выпадаю. Сие мне известно и контроль включен. Ошибка появляется при ЗАКРЫТИИпрограммы, а не во время выполнения.


begin. end © ( 2004-11-19 20:48 ) [17]


> [16] VitGun © (19.11.04 20:47)

Какой недоверчивый, какая разница — во время выполнения или при закрытии, программа просто злопамятная, вот и ругается только в конце.


VitGun © ( 2004-11-19 20:51 ) [18]

Хм.
Полтергейтс однако. len — 1 не помогло, а вот len-2 помогло.


GLFox ( 2004-11-19 20:51 ) [19]

for i:=0 to len do
begin
cap[i]:=something;
end;

Данный код не может быть верным! Индексы в динамических массивах начинаются с НУЛЯ и заканчиваются на Length(YourArray)-1.


VitGun © ( 2004-11-19 20:53 ) [20]

Блин. работает.
2 begin. end & Anatoly Podgoretsky — respect. Спасибо за помощь!


Anatoly Podgoretsky © ( 2004-11-19 20:56 ) [21]

VitGun © (19.11.04 20:47) [16]
Ой не надо отпираться от горячего, ты бы уж не проводил свой код, а теперь краснеть надо за продолжающее развешивание лапшию
Кроме того ты выполнил домашнее задание в 14, сколько у тебя получилось?


Anatoly Podgoretsky © ( 2004-11-19 20:58 ) [22]

begin. end © (19.11.04 20:45) [15]
Ну это способ писать без ошибок, особенно если к ней добавить еще и Low


Palladin © ( 2004-11-19 20:59 ) [23]


> [16] VitGun © (19.11.04 20:47)

ты может быть сначала вникнешь прежде чем сопротивляться. не веди себя как ламер.


VitGun © ( 2004-11-19 21:07 ) [24]

2 Anatoly Podgoretsky:
[14] пост не видел — сорри.
2 Palladin.
Да понял я в чем моя ошибка. Я то был уверен, что обращаюсь к верному кол-ву элементов массива, т.е ошибка была именно в цикле.

Ошибка: Invalid pointer operation

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Ошибка: Invalid pointer operation
procedure TForm1.Button2Click(Sender: TObject); var i, n : Integer; Point : array of.

Ошибка: Invalid pointer operation
Не подскажете как исправить ошибку при вычислении второй функции т.е У вылезает окно “Invalid.

Ошибка : Invalid pointer operation
При работе программы возникает данная ошибка ! Возможно она появляется при создании массива вот.

Ошибка: invalid pointer operation
Привет не могу вытащить настройки CheckBox1 из ini файла если CheckBox1.Checked:=true то выдает .

Исправить ошибку WINWORD.EXE в приложениях Office

WINWORD.EXE — это процесс Microsoft Word, указанный в диспетчере задач. Другие приложения Office, как exel, могут быть зависимы от процесса WINWORD.EXE. Некоторые пользователи сталкиваются с ошибкой в Windows 10, что этот процесс поврежден или отсутствует. Ошибки в контексте могут звучать по разному, но все они связаны с процессом WINWORD.EXE. Также стоит отметить, что при запуске приложения Excel или PowerPoint, вы также можете получить ошибку связанную с процессом WINWORD.EXE. Виновником ошибок может быть масса причина: повреждения пакета Office, профиль пользователя, сторонний антивирус, устаревший компонент, поврежденный файл или вредоносное ПО. Давайте разберем, что делать и как исправить ошибку приложения WINWORD.EXE в Windows 10.

Завершить процесс winword.exe

Нажмите Ctrl+Shift+Esc, чтобы открыть диспетчер задач. Далее найдите процесс WINWORD.EXE и щелкните по нему правой кнопкой мыши, после чего выберите завершить. Затем перезапустите приложение Office.

снять задачу WinWord

Запуск Word без макросов и дополнительных функций

Загрузите Word без макросов и посмотрите исправляет ли это ошибку. Нажмите сочетание клавиш Win + R и введите winword /m .

Запуск Word без макросов win+r

Чтобы Word не загружал свои надстройки, введите winword /a

Запуск Word без надстроек win+r

Сбросить запись реестра Word по умолчанию

Сначала вам нужно завершить процесс WINWORD.EXE в диспетчере задач. Далее нажмите обратно Win+R и введите winword /r .

сбросить значения реестра Word win+r

Сканирование на вирусы

Вирусы могут быть проблемой и выдавать ошибку. Воспользуйтесь антивирусным сканером , чтобы проверить систему на вирусы. Процесс WINWORD.EXE должен находиться на своем законном пути. Если он этот процесс находится по другому пути, то это вирус.

  • C:Program Files (x86)Microsoft OfficerootOffice16

Вы можете нажать на этот процесс в диспетчере задать правой кнопкой мыши и выбрать “Расположение файла”.

расположение файла WinWord.exe

Ремонт офиса

Поврежденный пакет Office может выдавать различные ошибки. Откройте “Панель управления” > “Удаление программ”, найдите Microsot Office и выделите его одним нажатием мыши, после чего нажмите сверху на кнопку “Изменить“. Будет запущен процесс восстановления программы, где выберите “Восстановление по сети” и далее следуйте инструкциям на экране.

I have a form that contains a TOpenDialog component (OpenDialog1) and a button.
OpenDialog1 has the ofAllowMultiSelect (of Options) property set to true.

Upon clicking the button the method AddFilesToListView is executed:

procedure TForm4.AddFilesToListView();
var
  ListItem : TListItem;
  I: Integer;
  F : File;
  LengthOfAudio : TDateTime;
  previousCursor : TCursor;

begin
  previousCursor := Self.Cursor;
  Self.Cursor := crHourGlass;

  if OpenDialog1.Execute then
  begin
    for I := 0 to OpenDialog1.Files.Count - 1 do begin
      if FileExists(OpenDialog1.FileName) then begin
        ListItem:=ListView1.Items.Add;
        ListItem.Caption := 'Test';
        ListItem.SubItems.Add(ExtractFileName(OpenDialog1.Files[I]));
        ListItem.SubItems.Add(ExtractFilePath(OpenDialog1.Files[I]));
      end else
        raise Exception.Create('File does not exist.');
    end;
  end;

  Self.Cursor := previousCursor;

  OpenDialog1.Files.Free;
end;

When running the application, selecting the first file, I have no problem but when wanting to select the second one, I get an error saying “Project project3 raised an exception class EInvalidPointer with message ‘Invalid Pointer Operation’.”

What’s the cause of this, how do I correct this?

Rob Kennedy's user avatar

Rob Kennedy

161k21 gold badges275 silver badges465 bronze badges

asked Jun 30, 2009 at 17:39

Attilah's user avatar

“Invalid pointer operation” means you freed memory that didn’t belong to you. One of these three things is the cause:

  • Your program freed something that had already been freed once before.
  • Your program freed something that was never allocated in the first place.
  • Your program freed something that had been allocated with a different memory manager.

In your code, you’re freeing the TOpenDialog‘s Files property. You didn’t allocate that string list, and the documentation doesn’t tell you to free it, so it’s reasonable to expect that the list actually belongs to the dialog component, and that the component will free it when it wants. Checking the source code in Dialogs.pas confirms that. Since you have also freed that object, you have a double-free error, which meets the first criterion I listed above. Remove that line.

As Uwe pointed out, you’re also processing a list of file names but only checking the existence of one. That’s a logic error in your program, but it would not cause the exception you’re seeing.

Community's user avatar

answered Jun 30, 2009 at 18:27

Rob Kennedy's user avatar

Rob KennedyRob Kennedy

161k21 gold badges275 silver badges465 bronze badges

2

You should check for

if FileExists(OpenDialog1.Files[I]) then begin

instead of

if FileExists(OpenDialog1.FileName) then begin

Better invest in a local variable holding that value.

And why this?

OpenDialog1.Files.Free;

answered Jun 30, 2009 at 17:53

Uwe Raabe's user avatar

Uwe RaabeUwe Raabe

44.5k3 gold badges81 silver badges128 bronze badges

1

Files is owned by the the TOpenDialog, and should not be freed directly.

answered Jun 30, 2009 at 18:36

skamradt's user avatar

skamradtskamradt

15.3k2 gold badges36 silver badges52 bronze badges

Добавить комментарий