Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.04.02;
Скачать: [xml.tar.bz2];

Вниз

Динамическая память   Найти похожие ветки 

 
Впервые Зашел   (2006-03-21 06:42) [0]

Здравствуйте! Просьба помочь...
Есть конструкция:
SetLength(A,n);
//
........
//
Finalize(A);

При выполнении вываливается окошко с ошибкой "Invalid pointer operator".
При пошаговом выполнении выясняется, что ошибка происходит при "уничтожении" не пустого А, (если пустой, то все нормально).
P.S. Делфи изучаю самостоятельно, поэтому прошу сделать скидку не неопытность.


 
balepa ©   (2006-03-21 07:21) [1]

A - массив ?
A:= nil;
Но должно и с Finalize работать


 
MBo ©   (2006-03-21 07:42) [2]

В большинстве случаев нет нужды вызывать Finalize - это сделается автоматически.
Сам Finalize вряд ли вызовет такую ошибку - скорее, она в коде,тобой утаённом. Не забыл, что динамические массивы нумеруются с нуля до n-1 ?


 
Впервые Зашел   (2006-03-21 08:51) [3]

Ошибка была даже в таком коде.

var A:array of Integer;
begin
for i:=0 to n-1 do A[i]:=1;
Finalize(A);
end.


2balepa ©
C nil та же ошибка.
Потому я и в ауте! По всем правилам должна работать, ан нет!


 
Впервые Зашел   (2006-03-21 08:54) [4]

К предыдущему сообщению.
Закосячил код...
Понятно что по настоящему должно быть....

var A:array of Integer;
    i:integer;
    n:integer;
begin
SetLength(A,n);
for i:=0 to n-1 do A[i]:=1;
Finalize(A);
end.


 
MBo ©   (2006-03-21 09:10) [5]

>Впервые Зашел   (21.03.06 08:54) [4]
finalize здесь абсолютно ни к чему, но независимо от этого код ошибки не вызывает


 
tesseract ©   (2006-03-21 09:14) [6]

Finalize имхо здесь не нужен.
в данном случае он равносилен SetLength(A,0)


 
Loginov Dmitry ©   (2006-03-21 09:19) [7]


> Впервые Зашел   (21.03.06 08:54) [4]


> SetLength(A,n);


А где n инициализируется? Если n очень большое или отрицательное, то ошибка по любому будет.


 
Впервые Зашел   (2006-03-21 09:46) [8]

2Loginov Dmitry

> А где n инициализируется? Если n очень большое или отрицательное,
>  то ошибка по любому будет.

Оп-п-па! А с этого места поподробней, по-моему для динамических массивов размер n сильно не влияет. В свое время я на Borland Pascal-e в динамической памяти Real матрицу 500x500 хранил и место для вектора иксов оставалось. (Если мне память не изменяет оперативки у меня было 64 мб.) А в дельфи вектор на 64 создать не может??? (Сейчас 512).


 
Сергей М. ©   (2006-03-21 09:51) [9]


> Впервые Зашел   (21.03.06 09:46) [8]


А где в твоем коде фигурирует этот самый "вектор на 64" ?

И причем здесь "создать", если ты утверждаешь что ошибка возникает именно на Finalize() ?

Переменные эти как у тебя объявлены - статически или локально ?


 
Loginov Dmitry ©   (2006-03-21 10:02) [10]


> по-моему для динамических массивов размер n сильно не влияет


Ну как же не влияет? У тебя в распоряжении всего 2 Гбайта памяти, поэтому твой массив не может содержать более пол-миллиарда элементов. А тип Integer имеет размеры (-2 млрд .. +2 млрд). Поэтому возникновение ошибки в твоем случае - наиболее вероятный исход работы программы.


 
Впервые Зашел   (2006-03-21 11:18) [11]

2Сергей М.
В данном случае "Создать"="Работать".
A и n статические, i локальная. В чем смысл???
2Loginov Dmitry
Ну ясно, я не дурак. Я 2 млрд и не ввожу.
И еще раз говорю: "Ошибка вылетает на стадии освобождения памяти."


 
Сергей М. ©   (2006-03-21 11:35) [12]


> Впервые Зашел   (21.03.06 11:18) [11]


> В чем смысл???


Лок.переменная при отсутствии явной инициализации имеет непредсказуемое начальное значение, значение же статической при этих условиях равно нулю.



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2006.04.02;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.041 c
1-1141280201
Димон
2006-03-02 09:16
2006.04.02
запуск Оутлук с адресом из таблицы


15-1142323371
vajo
2006-03-14 11:02
2006.04.02
Затопили соседи


15-1142168818
DillerXX
2006-03-12 16:06
2006.04.02
Подскажите такую программу


15-1141972607
WondeRu
2006-03-10 09:36
2006.04.02
Рабство vs Армия


2-1142912102
boalse
2006-03-21 06:35
2006.04.02
Биты и байты





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский