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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.05.2010, 18:06   #1
eraserhp
Пользователь
 
Регистрация: 15.05.2010
Сообщений: 24
По умолчанию Странное поведение realloc

Доброго всем времени суток)))

Код:
Код:
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 строки нет.

Не могу понять почему...
Плиз хелп гуруз)))
eraserhp вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Странное поведение realloc eraserhp Общие вопросы C/C++ 7 17.05.2010 09:52
Странное поведение gets alex_alpha Общие вопросы C/C++ 3 27.03.2010 18:21
Странное поведение TTreeView mutabor Компоненты Delphi 1 01.05.2009 05:17
Странное поведение базы yulia БД в Delphi 7 22.04.2009 07:15