• Нужно ли вообще очищать память в этом месте?

    @devEngineer Автор вопроса
    Денис Загаевский, Спасибо большое, теперь понятно стало почему программа крашилась.
  • Нужно ли вообще очищать память в этом месте?

    @devEngineer Автор вопроса
    Александр Ананьев, jcmvbkbc, Извините, конечно, за такую реализацию, без проверок) Но меня конкретно волнует случай, с моей строкой которая освобождает память. Я рассматриваю случай, когда входные данные корректны.
    У меня возник этот вопрос, когда я попытался сделать вот так.
    // ...
    char* str = "Hello, world!";
    str = erase_symbol(str, index);
    // ...

    Можно ли вообще так делать или не стоит, и лучше записать в новый указатель а старый просто очистить? И все таки, почему программа ломается на строке, где очищается память?

    ПС палками не бейте, просто ищу ответ почему так работает.
  • Нужно ли вообще очищать память в этом месте?

    @devEngineer Автор вопроса
    Rsa97, Да, я не спорю, но не дописывается ли ноль автоматически?
    Есть код
    // ...
    char* str = "Hello, world!"; // тут ноль записывается сразу
    char* new_str = erase_symbol(str, index);
    // _strlen моя функция, которая считает до \0
    printf("%d %d", _strlen(str), _strlen(new_str)); // вывод будет корректным
    // ...

    Я понимаю что я выделяю память и под ноль нужно тоже, но почему тогда моя функция работает корректно? И все-таки стоит ли явно тогда прописывать ноль при выделении памяти?
  • Нужно ли вообще очищать память в этом месте?

    @devEngineer Автор вопроса
    Ну то есть в мейне будет такой код
    // ...
    char* str = "Hello, world!";
    str = erase_symbol(str, index);
    // ...

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