malloc, free и переопределение переменной

Я пытаюсь использовать переменную и стереть ее сразу после того, как функция использовала ее. По сути, я делаю str1+str2, использую его в функции и освобождаю память. Я думал, что получил все прямо, но мой код выдает мне предупреждения и ошибку:

  1. ОШИБКА: переопределение "комманд".
  2. Предупреждение: неявное объявление функции 'malloc' [-Wimplicit-function-объявление]
  3. Предупреждение: несовместимое неявное объявление встроенной функции 'malloc' [включено по умолчанию]
  4. Предупреждение: неявное объявление функции 'free' [-Wimplicit-function-объявление]
  5. Предупреждение: несовместимое неявное объявление встроенной функции '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.

Другие вопросы по тегам