Доброго всем времени суток)))
Код:
Код:
double **Matrix;
int FirstNode = 0;
Matrix = (double**)calloc(2048, sizeof(double*));
for (int i = 0; i < 2048; i++)
{
Matrix[i] = (double*)calloc(2048, sizeof(double));
}
MatrixSize = 2048;
MapFind->MapSelect->ClearAll();
MapFind->Active = false;
MapFind->FindPoint=false;
MapFind->MapSelect->MapSites[-1] = false;
MapFind->MapSelect->MapSites[NetNumber + 1] = true;
MapFind->MapSelect->SiteNumber = NetNumber + 1;
MapFind->MapSelect->KeyObject[""] = false;
MapFind->MapSelect->KeyObject["L0000005557"]= true;
MapFind->Active= true;
MapObj->Style = OS_NOVIEW;
MapObj1->Style = OS_NOVIEW;
MapFind->First();
while(!MapFind->Eof)
{
int StartPoint = 0, EndPoint = 0;
for(int i = 0; i < MapFind->MapObj->Semantic->SemanticCount; ++i)
{
if(MapFind->MapObj->Semantic->SemanticCode[i] == 32813)
{
StartPoint = StrToInt(MapFind->MapObj->Semantic->SemanticValue[i]);
if(!FirstNode)
FirstNode = StartPoint;
}
else if(MapFind->MapObj->Semantic->SemanticCode[i] == 32814)
EndPoint = StrToInt(MapFind->MapObj->Semantic->SemanticValue[i]);
}
while(StartPoint - FirstNode > MatrixSize - 1
|| EndPoint - FirstNode > MatrixSize - 1)
{
MatrixSize *= 2;
Matrix = (double**)realloc((void*)Matrix, MatrixSize * sizeof(double*));
for (int i = 0; i < MatrixSize; i++)
{
Flag = false;
try
{
Matrix[i] = (double*)realloc((void*)Matrix[i], MatrixSize * sizeof(double));
}
catch(...)
{
ShowMessage(i);
}
}
}
try
{
Matrix[StartPoint - FirstNode][EndPoint - FirstNode] = MapFind->MapObj->Length;
Matrix[EndPoint - FirstNode][StartPoint - FirstNode] = MapFind->MapObj->Length;
}
catch(...)
{
ShowMessage("Начальная точка ребра: " + IntToStr(StartPoint - FirstNode));
ShowMessage("Конечная точка ребра: " + IntToStr(EndPoint - FirstNode));
ShowMessage("Номер ребра: " + IntToStr(MapFind->MapObj->Key));
ShowMessage("Длина ребра: " + FloatToStr(MapFind->MapObj->Length));
}
if(StartPoint - FirstNode < 0 || EndPoint - FirstNode < 0)
{
ShowMessage("Начальная точка ребра: " + IntToStr(StartPoint - FirstNode));
ShowMessage("Конечная точка ребра: " + IntToStr(EndPoint - FirstNode));
ShowMessage("Номер ребра: " + IntToStr(MapFind->MapObj->Key));
ShowMessage("Длина ребра: " + FloatToStr(MapFind->MapObj->Length));
}
MapFind->Next();
}
ShowMessage(MatrixSize);
return true;
в выделенной части при перераспределении памяти когда i = 2058 вылетает ошибка Access violation in module borlandmm.dll, причем для всех остальных строк все проходит нормально. Память для всех остальных перераспределяется и записываются значения, а вот для 2058 строки нет.
Не могу понять почему...
Плиз хелп гуруз)))