Прервать ловушку при попытке добавить массивы символов - PullRequest
4 голосов
/ 14 мая 2011

Я пытаюсь добавить несколько символьных массивов в функцию:

#define ID_LEN 5
#define MAX_NAME_LEN 25
#define FALSE 0
char **orderedIds, buffer[5], idString[ID_LEN + 1], inputName[MAX_NAME_LEN + 1], inputDrinkType;
char inputDescription[240];
int i, listSize = 0, uniqueID, validated = FALSE;

Это будет работать нормально. Однако, если я добавлю еще один байт для inputDescription, он выдаст ошибку прерывания:

char inputDescription[241];

Также, если я добавляю новые строковые массивы, я получаю ту же ошибку:

char inputDescription[240], newStringArray[10];

Это большой проект с несколькими файлами и функциями, добавление всего кода для большей картины может быть немного сложным .... Кто-нибудь знает, что здесь происходит ???

Решено: Все сводилось к тому, что я не завершал строку, которую я строил, перед тем как использовать ее в strcat.

1 Ответ

4 голосов
/ 14 мая 2011

Да, но только в целом

C не является безопасным для памяти языком . Возможно случайно связать объект с другим; иногда его называют дикий указатель или висячий указатель .

Проблема на самом деле не в том, имеет ли inputDescription 240 или 241 байт, а скорее в том, в каком объекте создается псевдоним другого, и является ли это фатальной ошибкой или меньшей проблемой. Небольшие изменения в вашей программе изменяют структуру памяти и изменяют симптомы сбоя, но причиной является ошибка в исходном коде программы.

Если вы очистите программу, вы, вероятно, найдете проблему.

  1. Есть прототип для всего
  2. Включите некоторые или все предупреждения компилятора и исправьте выявленные проблемы
  3. Включите отладчик памяти
  4. Используйте отладчик общего назначения и получите трассировку
...