malloc, free и переопределение переменной
Я пытаюсь использовать переменную и стереть ее сразу после того, как функция использовала ее. По сути, я делаю str1+str2, использую его в функции и освобождаю память. Я думал, что получил все прямо, но мой код выдает мне предупреждения и ошибку:
- ОШИБКА: переопределение "комманд".
- Предупреждение: неявное объявление функции 'malloc' [-Wimplicit-function-объявление]
- Предупреждение: несовместимое неявное объявление встроенной функции 'malloc' [включено по умолчанию]
- Предупреждение: неявное объявление функции 'free' [-Wimplicit-function-объявление]
- Предупреждение: несовместимое неявное объявление встроенной функции 'free' [включено по умолчанию]
Вот вышеупомянутый код:
// Step 1
char* commande = (char*) malloc(len1 + len2 + 1);
strcpy(commande, str1);
strcat(commande, str2);
function(commande);
free(commande);
// Step 2
char* commande = (char*) malloc(len3 + len4 + 1);
strcpy(commande, str3);
strcat(commande, str4);
function(commande);
free(commande);
Что я делаю неправильно?
Изменить: я исправил опечатку в len2.
2 ответа
Заявление, такое как
char* commande = (char*) malloc(len3 + len4 + 1);
является объявлением переменной. Это говорит компилятор: я хочу, чтобы commande был указателем на символ. Вы можете объявлять переменные только один раз в функции, так как не имеет смысла переопределять переменную.
Ошибки в несовместимых неявных определениях происходят из-за того, что вы не указали компилятору, какой тип malloc
есть. Для этого вы должны включить заголовочный файл, который содержит все необходимые объявления. Поместите следующую строку поверх вашего файла:
#include <stdlib.h>
Убедитесь, что вы включили, и нет необходимости объявлять указатель комманд после строки 2.