Я пишу консольное приложение Win32 в Visual Studio 2010.Характер повторного использования массива
Рассмотрим одну функцию, взять два char*
в качестве параметров.
Ниже прототип функции:
void WriteApplicationFile(char *mappname,char* MessageString)
{
//Do some File related stuffs.
}
Теперь следующие вызовы работают отлично:
WriteApplicationFile("FirstOne", "Append Me");
WriteApplicationFile("FirstOne", "Append Another");
Но если я попробовать то же самое с некоторыми символьный массив вещь это даст мне утверждение, и бросить меня на сборку.
Следующий код не работает:
char * LocalBuffer = new char[100];
sprintf(LocalBuffer,"Number of jobs in Queue %d",JobsCount);
WriteApplicationFile("SAAZshadowProtect",LocalBuffer);
free(LocalBuffer);
LocalBuffer = NULL;
//Work fine.
//...
LocalBuffer = new char[100];
sprintf(LocalBuffer,"Log file name %s",LogFileCharName);
WriteApplicationFile("SAAZshadowProtect",LocalBuffer);
free(LocalBuffer); // I got assertion here..
LocalBuffer = NULL;
Где я буду неправильно?
Еще одна вещь в том, что я хочу обрабатывать все утверждения и ошибки с помощью блока try-catch. Как мне это сделать?
использовать простой старый malloc, если вы на C. и освобождаетесь, чтобы перераспределить одинаковый размер? только это дает мне озноб ... memset существует не просто так. – BigMike
Кажется, что переполнение буфера произошло до Localbuffer. – doptimusprime
Проверьте, не произошла ли перезапись памяти. – doptimusprime