Функция выглядит так, как будто она не будет аварийно завершать работу, но она не будет работать правильно, и она будет читать из слова [-1], что вряд ли приведет к аварийному завершению, но это проблема. Возможно, ваша проблема с аварийным завершением состоит в том, что вы передали строковый литерал, который компилятор поместил в сегмент данных только для чтения.
Нечто подобное может произойти сбой во многих операционных системах.
char * word = "test";
reverse(word); // this will crash if "test" isn't in writable memory
Есть также несколько проблем с вашим алгоритмом. У вас есть len = len-1
, а затем temp[len-1]
, что означает, что последний символ никогда не будет прочитан, а когда len == 0, вы будете читать с первого символа до слова. Кроме того, temp и word оба являются указателями, поэтому они оба указывают на одну и ту же память, я думаю, вы хотели создать копию слова, а не просто копию указателя на слово. Вы можете сделать копию word
с помощью strdup . Если вы сделаете это и исправите свою проблему с len, то ваша функция должна работать,
Но это по-прежнему не исправит сбой записи, вызванный кодом, который вы нам не показали.
О, и если вы используете strdup
, обязательно вызовите free
, чтобы освободить temp
, прежде чем покинуть функцию.