Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.01.2010, 21:56   #1
AzoTik
Новичок
Джуниор
 
Регистрация: 19.01.2010
Сообщений: 4
По умолчанию Ошибка доступа к памяти

Доброго времени суток!
У меня следующий вопрос к участникам форма. Занимаюсь написанием специализированной программухи. (т.е выполняю чисто математические расчеты в делфи). Возникла следующая проблема, после запуска программы на расчет, она выдает результаты, строит графики, но когда опять её запускаешь, после повторной выдачи результатов и графика вылетает ошибка доступа к памяти, причем когда жмешь break она не указывает строчку де ошибка, когда делаешь рукой трассировку опять такой ошибки не обнаруживается....Ошибка вылетает секунд через 5 после тога как прога завершила расчет....использую динамические массивы, но под них все аккуратно выделяю память (так как иначе первый раз бы не считала)...пишу в делфи 2007...пробовал в 2010 те же грабли...опреционка windows7, но в ХР тоже самое....а самое интересно, что когда нажимаешь continio, то опять вылетает эта же ошибка и так до бесконечность (замкнутый круг) опка не остановишь прогу из делфи....помагите кто чем может, а то работа стала прямо колом...заранее благодарен всем за их версии
AzoTik вне форума Ответить с цитированием
Старый 19.01.2010, 22:17   #2
maxionans
Форумчанин
 
Аватар для maxionans
 
Регистрация: 02.01.2010
Сообщений: 254
По умолчанию

Судя по всему у тебя повторно используется память(или объекты), которая уже была освобождена прежде. Но не видя код ничего конкретного сказать нельзя.
maxionans вне форума Ответить с цитированием
Старый 19.01.2010, 22:41   #3
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
Сообщение от AzoTik Посмотреть сообщение
аккуратно выделяю память
Не верю. Станиславский.
А где фраза "и так же аккуратно ее освобождаю" ?
mihali4 вне форума Ответить с цитированием
Старый 19.01.2010, 22:45   #4
AzoTik
Новичок
Джуниор
 
Регистрация: 19.01.2010
Сообщений: 4
По умолчанию

Вот мой UNIT
Код:
var
AssayData: TAssayData;
NBP,VOL:ARRAY OF EXTENDED;

implementation

uses NeftIndex, AssayCharacteristic, DispetNeft;

{$R *.dfm}

procedure TAssayData.InsertExecute(Sender: TObject);
begin
CurveTable.RowCount:=CurveTable.RowCount+1;
end;

procedure TAssayData.RunExecute(Sender: TObject);
VAR
I,N,J,K:INTEGER;
THK,TKK,SHAG,T:EXTENDED;
TBEGIN,TEND,X,Y,A,B,C,D,TASTMD86,XASTMD86,TSD,XSD:ARRAY OF EXTENDED;
POINT:ARRAY OF INTEGER;
begin
NBP:=NIL;
VOL:=NIL;
THK:=0;
TKK:=0;
POINT:=0;
SHAG:=0;
T:=0;
//ОПРЕДЕЛЯЕМ КОЛИЧЕСТВО ЗАДАННЫХ ТОЧЕК
N:=0;
for I := 1 to CurveTable.RowCount do BEGIN
if (CurveTable.Cells[0,I-1]<>'')AND(CurveTable.Cells[1,I-1]<>'') then
N:=N+1;
END;
SetLength(X,N);
SetLength(Y,N);
SetLength(A,N);
SetLength(B,N);
SetLength(C,N);
SetLength(D,N);
//ЗАПОЛНЯЕМ ЗНАЧЕНИЯ МАССИВОВ
for I := 0 to N-1 do BEGIN
X[I]:=STRTOFLOAT(CurveTable.Cells[0,I])/100;
Y[I]:=STRTOFLOAT(CurveTable.Cells[1,I]);
END;
//РАСЧЁТ КОЭФФИЦИЕНТОВ КРИВОЙ
AssayCharacteristic.Assay.CubicSplain(X,Y,A,B,C,D);
//ПЕРЕВОД ASTM D86 В TBP
if RadioASTMD86.Checked=TRUE then BEGIN
//ПОСТРОЕНИЕ КРИВОЙ ASTM D86
//ОПРЕДЕЛЕНИЕ ГРАНИЦ ИНТЕРВАЛОВ И ИХ КОЛИЧЕСТВА
if DispetNeft.DispNeft.ComboBox7.ItemIndex=0 then begin
SETLENGTH(TASTMD86,7);
SETLENGTH(XASTMD86,7);
XASTMD86[0]:=0;
XASTMD86[1]:=0.1;
XASTMD86[2]:=0.3;
XASTMD86[3]:=0.5;
XASTMD86[4]:=0.7;
XASTMD86[5]:=0.9;
XASTMD86[6]:=0.95;
end
else  BEGIN
SETLENGTH(TASTMD86,7);
SETLENGTH(XASTMD86,7);
XASTMD86[0]:=0;
XASTMD86[1]:=0.1;
XASTMD86[2]:=0.3;
XASTMD86[3]:=0.5;
XASTMD86[4]:=0.7;
XASTMD86[5]:=0.9;
XASTMD86[6]:=1;
END;
//РАСЧЁТ КОЭФФИЦИЕНТОВ КРИВОЙ
AssayCharacteristic.Assay.CubicSplain(X,Y,A,B,C,D);
AssayCharacteristic.Assay.FIND(X,XASTMD86,A,B,C,D,TASTMD86);
SETLENGTH(VOL,LENGTH(XASTMD86));
SETLENGTH(NBP,LENGTH(TASTMD86));
SetLength(A,LENGTH(VOL));
SetLength(B,LENGTH(VOL));
SetLength(C,LENGTH(VOL));
SetLength(D,LENGTH(VOL));
AssayCharacteristic.Assay.ASTMD86toTBP(TASTMD86,XASTMD86,NBP);
for I := 0 to HIGH(TASTMD86) do
VOL[I]:=XASTMD86[I];
END;
//ПЕРЕВОД SD В TBP
if RadioASTMD2887.Checked=TRUE then   BEGIN
//ПОСТРОЕНИЕ КРИВОЙ SD
//ОПРЕДЕЛЕНИЕ ГРАНИЦ ИНТЕРВАЛОВ И ИХ КОЛИЧЕСТВА
//ПЕРЕВОД ASTM D2887 В TBP
SETLENGTH(TSD,7);
SETLENGTH(XSD,7);
XSD[0]:=0.05;
XSD[1]:=0.1;
XSD[2]:=0.3;
XSD[3]:=0.5;
XSD[4]:=0.7;
XSD[5]:=0.9;
XSD[6]:=0.95;
//РАСЧЁТ КОЭФФИЦИЕНТОВ КРИВОЙ
AssayCharacteristic.Assay.CubicSplain(X,Y,A,B,C,D);
AssayCharacteristic.Assay.FIND(X,XSD,A,B,C,D,TSD);
SETLENGTH(VOL,HIGH(TSD)+1);
SETLENGTH(NBP,HIGH(TSD)+1);
SetLength(A,HIGH(VOL)+1);
SetLength(B,HIGH(VOL)+1);
SetLength(C,HIGH(VOL)+1);
SetLength(D,HIGH(VOL)+1);
AssayCharacteristic.Assay.ASTMD2887toTBP(TSD,XSD,NBP);
for I := 0 to HIGH(XSD) do
VOL[I]:=XSD[I];
END;
//ПОСТРОЕНИЕ КРИВОЙ ИТК
//ОБНУЛЕНИЕ
for I := 0 to HIGH(A) do BEGIN
A[I]:=0;
B[I]:=0;
C[I]:=0;
D[I]:=0;
END;
SetLength(X,LENGTH(VOL));
SetLength(Y,LENGTH(VOL));
for I := 0 to HIGH(NBP) do BEGIN
X[I]:=VOL[I];
Y[I]:=NBP[I];
END;
AssayCharacteristic.Assay.CubicSplain(X,Y,A,B,C,D);
//ОПРЕДЕЛЕНИЕ ГРАНИЦ ИНТЕРВАЛОВ И ИХ КОЛИЧЕСТВА
N:=0;
THK:=A[1]+B[1]*(0-X[0])+C[1]*POWER((0-X[0]),2)+D[1]*POWER((0-X[0]),3);
TKK:=A[HIGH(X)-1]+B[HIGH(X)-1]*(1-X[HIGH(X)-2])+C[HIGH(X)-1]*POWER((1-X[HIGH(X)-2]),2)+D[HIGH(X)-1]*POWER((1-X[HIGH(X)-2]),3);
AssayCharacteristic.Assay.NUMBERPOINT(THK,TKK,N);
SetLength(TBEGIN,N);
SetLength(TEND,N);
SetLength(POINT,N);
AssayCharacteristic.Assay.POINT(THK,TKK,TBEGIN,TEND,POINT);
//ПОЛУЧЕНИЕ ТОЧЕК ДЛЯ ПОСТРОЕНИЯ КРИВОЙ РАЗГОНКИ
//ОПРЕДЕЛЕНИЕ СУММАРНОГО КОЛИЧЕСТВА ТОЧЕК
N:=0;
for I := 0 to HIGH(POINT) do
N:=N+POINT[I];
SetLength(NBP,N);
SetLength(VOL,N);
N:=0;
//ОБНУЛЕНИЕ
for I := 0 to HIGH(A) do BEGIN
A[I]:=0;
B[I]:=0;
C[I]:=0;
D[I]:=0;
END;
AssayCharacteristic.Assay.CubicSplain(Y,X,A,B,C,D);
for I := 0 to HIGH(POINT) do BEGIN
SHAG:=0;
SHAG:=(TEND[I]-TBEGIN[I])/POINT[I];
for J :=N  to POINT[I]+N do BEGIN
NBP[J]:=TBEGIN[I]+SHAG*(J-N);
END;
N:=N+POINT[I];
END;
AssayCharacteristic.Assay.FIND(Y,NBP,A,B,C,D,VOL);
{Chart1.Series[0].Clear;
for I := 0 to HIGH(TBP) do
Chart1.Series[0].AddXY(XITK[I]*100,(TBP[I]-273.15),'',clRed);}
end;
end.
Внимательность и еще раз внимательность...
У вас явный недостаток внимательности, поскольку вы даже правила не удосужились прочесть внимательно:
У нас принято оформлять код специальным тэгом - при помощи кнопочки "#".
Только...
И не значком #.
И не РНР-кодом.
И не значком цитаты.
И не собственными "ручками".
Рекомендую. Помимо общих правил форума есть и дополнения к ним в каждом разделе...
Модератор

Последний раз редактировалось mihali4; 20.01.2010 в 00:06.
AzoTik вне форума Ответить с цитированием
Старый 20.01.2010, 16:31   #5
AzoTik
Новичок
Джуниор
 
Регистрация: 19.01.2010
Сообщений: 4
По умолчанию

пробовал тут смотреть. крутить и обнаружил что ошибка возникает, когда я вначале повторного расчёта освобождаю память вот тут на второй строчке, мо укого есть какие нить идеи....
Код:
TBP:=nil;
VOL:=NIL;
TASTMD86:=NIL;
AzoTik вне форума Ответить с цитированием
Старый 20.01.2010, 17:47   #6
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Делайте SetLength(VOL,0);
Кстати, а зачем локальный-то убивать ?
Я имею в виду TASTMD86.
mihali4 вне форума Ответить с цитированием
Старый 22.01.2010, 10:17   #7
AzoTik
Новичок
Джуниор
 
Регистрация: 19.01.2010
Сообщений: 4
По умолчанию

Занимался её трассировкой, так вот при трассировки ошибок нету, ошибка вылетает де-то секунд через 4-5 после того, как закончила прога расчет, а иногда бывает все считает и графики рисует, а ошибка выскакивает, когда закрываешь прогу....мо у кого были подобные косяки, подскажите де посмотреть чё поискать...
AzoTik вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка доступа к созданному файлу Siluet Общие вопросы Delphi 11 09.11.2009 19:49
Ошибка: Нарушение доступа к памяти. VladimirAleks Общие вопросы Delphi 6 03.11.2009 14:42
Ошибка чтения из памяти Шульц Общие вопросы Delphi 20 03.11.2009 12:26
Ошибка создания доступа к папке Oleg-vp Работа с сетью в Delphi 4 14.01.2008 14:35
ошибка памяти. UMmi Общие вопросы Delphi 3 23.11.2006 07:06