Ниже приведен фрагмент кода с начала программы, которую я пишу (в которой содержится ошибка).Malloc, strlen, strcat
char *name;
char *name2;
if (argn != 2) {
printf("You have to enter the name of the input file");
return 1;
}
name = malloc(strlen(arg[1]) + 1);
name2 = malloc(strlen(arg[1]) + 1);
strcpy(name, arg[1]);
strcpy(name2, arg[1]);
strcat(name2, "-results.pdb");
Существует ошибка здесь что с strcat
, действительно name2
не имеет достаточного размера для выполнения операции выше. Тем не менее strcat
выполняет без проблем. Однако позже в полностью несвязанной части программы операция с другим массивом, который был инициализирован после этого strcat
, дает ошибку. Это целочисленный массив, для которого я присваиваю значения его элементам, и он дает ошибку, прежде чем я могу назначить все значения. Я предполагаю, что, поскольку для операции над ним недостаточно памяти в имени2, это как-то влияет на следующие инициализированные массивы. Я хотел бы понять:
1 Что может произойти здесь, так что дополнительная информация, которая не может быть записана в имя2, влияет на другие массивы, объявленные позже?
2- Возможно, я не смог бы легко справиться с этой проблемой в более сложной программе, поскольку ошибка возникает в другом месте, а не в strcat. Как я могу предотвратить такие скрытые ошибки, как процесс memory problematic
, влияющий на абсолютно несвязанные массивы в другом месте?
(1) - трудно сказать, так как вы не отправляли код с проблемой; (2) проверять длины перед использованием 'strcat' и других подобных функций –
, к сожалению, код слишком длинный с несколькими заголовочными файлами. Могу ли я спросить, есть ли отладчик кода, который бы распознал эту ошибку? cppcheck doesn't. – Sina
не может быть заменой для правильного изучения языка –