Поиск:

Ответ в темуСоздание новой темы Создание опроса
> SEGFAULT при обращении по указателю на строку 
:(
    Опции темы
LeonidPr
Дата 11.5.2014, 19:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 220
Регистрация: 17.2.2012
Где: г. Чебоксары

Репутация: нет
Всего: 1



Сегодня столкнулся со странной проблемой. Свел её к минимальному неработающему варианту.
Вот такой код при выполнении дает Segmentation fault
Код

void test(char *s) {
    *s=' ';
};
     
char *test_str="it's a test string";
     
int main() {
    test(test_str);
}

gcc 4.5.2 из сборки MinGW
После того как подумал переделал так
Код

void test(char *s) {
    *s=' ';
};
     
char test_str[]="it's a test string";
     
int main() {
    test(test_str);
}

Этот вариант собирается и исполняется без проблем.
Но хотелось бы понять, почему первый вариант не работает?
А вот еще, попробовал собрать и запустить первый вариант в C++ Builder 5 - все выполнилось без проблем.
Мои измышления - в первом варианте выделяется память под строку (временный объект, неименованный), затем адрес этой области присваивается указателю test_str, но на момент вызова функции test, эта область уже оказывается освобождена (почему?) и возникает ошибка. Объяснение фантастическое, но я пока ума не приложу, что может быть еще?
--------------------
pkunzip.zip
PM MAIL   Вверх
leniviy
Дата 11.5.2014, 19:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 552
Регистрация: 8.2.2003
Где: Спб

Репутация: нет
Всего: 5



я думаю, он поместил строку в ридонли секцию.
http://stackoverflow.com/questions/164194/...ing-to-a-string

С ключом -Wwrite-strings gcc пишет:
Код

aaa.c:5:16: warning: initialization discards 'const' qualifier from pointer target type [enabled by default]
 char *test_str="it's a test string";
                ^


Это сообщение отредактировал(а) leniviy - 11.5.2014, 19:38
PM MAIL   Вверх
LeonidPr
Дата 11.5.2014, 20:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 220
Регистрация: 17.2.2012
Где: г. Чебоксары

Репутация: нет
Всего: 1



Спасибо за ссылку!
Варнинг видел, но не думал что компилятор в секцию .text положит строку, но сейчас Map файл посмотрел, да, действительно туда заносит.

Это сообщение отредактировал(а) LeonidPr - 11.5.2014, 20:18
--------------------
pkunzip.zip
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | GNU toolchain | Следующая тема »


 




[ Время генерации скрипта: 0.1092 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.