Мне нужно нарисовать строку символов, сколько захочу. Поэтому я написал функцию для этой цели:strcat make crash program (0xc0000005)
void fDrawLine(int length)
{
int i;
char * compLine = (char *) malloc(WINDOW_WIDTH + 2);
for(i = 0; i < length; i++)
strcat(compLine, "-");
fDrawSpacedMessage(compLine, -1, TRUE);
}
WINDOW_WIDTH
определяется как 80
, fDrawSpacedMessage
другая функция для печати текстов по центру и т.д.
Он не строит отлично, никаких ошибок, никаких предупреждений. Но во время выполнения все работает, но если выполняется fDrawLine
, программа вылетает и выдает код ошибки 0xc0000005
. Я знаю, что это касается распределения памяти, но я уже инициализирую строку compLine
.
Я пробовал пару вещей; Я думал, что другая функция вызвала это, поэтому я выделил fDrawLine
, но сбой продолжался. Изменение инициализации с помощью compLine[0] = 0;
, compLine[WINDOW_WIDTH] = {0};
не помогло.
Он хорошо работает с моей другой машиной, которая запускает Ubuntu с последним gcc, но при использовании Code :: Blocks (MinGW) в Windows он продолжает сбой.
Что не так с этим кодом?
Почему вы не используете 'memset' заполнить«-»? И что такое значение 'length'? – i486
Поскольку это школьный проект, вы, по-видимому, учитесь кодировать. Остальные вещи в стороне, посмотрите на свою функцию, затем ответьте на этот вопрос: что бы вызвал вызов 'fDrawLine (WINDOW_WIDTH * 2),' на самом деле? Научитесь программировать оборонительно – kdopen
1) Нужно застраховать 'length' не слишком велико. Добавьте 'assert (length <(WINDOW_WIDTH + 1));' 2) '2' здесь магическое число. Предоставьте подробную информацию о 2? (Может ли 'fDrawSpacedMessage()' провалиться при попытке отобразить 81 длинный? ---...---??) – chux