strcat и malloc

c string malloc

3581 просмотра

2 ответа

86 Репутация автора

В настоящее время мне нужно strcat () 2 строки вместе. Подвох в том, что я должен сделать это 3 раза. (Всего 6 объединений). Процедура повторяется 3 раза с использованием циклов:

  1. Malloc строка
  2. Используя цикл for, вызовите strcat 2 раза
  3. Освободить строку

Проблема в том, что даже после того, как я освобождаю строку и повторно выполняю malloc, strcat, похоже, продолжает объединять предыдущую строку.

Например:

Ожидаемый результат от AA BB CC DD EE FF

  • строка strcat 1: AABB
  • строка strcat 2: CCDD
  • строка strcat 3: EEFF

Фактический выход:

  • строка strcat 1: AABB
  • строка strcat 2: AABBCCDD
  • строка strcat 3: AABBCCDDEEFF

Кто-нибудь знает, почему он это делает?

void sendInitialHand(card * deck) {

    char * stringToSend;
    playerNode * curNode;
    curNode = housePlayers.head;

    for (int i=0; i<housePlayers.playerCount; i++) {

        stringToSend = malloc(sizeof(char)*6);

        for (int j=0; j<52; j++) {
            if (deck[j].inPlay == curNode->playerFD) {
                strcat(stringToSend, deck[j].identifier);
            }
        }

        for (int j=0; j<52; j++) {
            if (deck[j].inPlay == 10) {
                strcat(stringToSend, deck[j].identifier);
            }
        }    

        printf("[NETWORK] Send %d the following: %s\n", curNode->playerFD, stringToSend);
        //send(curNode->playerFD, stringToSend, 6, 0);
        free(stringToSend);
        curNode = curNode->next;
    }
}
Автор: user1305850 Источник Размещён: 03.04.2012 07:53

Ответы (2)


0 плюса

2791 Репутация автора

Изучите свою циклическую структуру с помощью операторов printf, вероятно, вы не освобождаете то, что вы думаете, когда вы думаете, что вы есть. Отредактирую ответ на основе кода ..

Вы только re-malloc, который просто говорит, эй, я собираюсь написать здесь .., что вы уже сказали. Попробуйте освободить / повторно инициализировать переменную

Автор: RyanS Размещён: 03.04.2012 07:56

1 плюс

5175 Репутация автора

Решение

После ptr=malloc(…), до strcat(), инициализируйте пространство с *ptr = '\0';. Возвращаемая память malloc()обычно не обнуляется.

Автор: Luca Rocchi Размещён: 03.04.2012 07:58
Вопросы из категории :
32x32