Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Mac и я. C/Objective-C/C++. Ошибки сигментирования, Ошибки при выполнении в Mac 
:(
    Опции темы
grisWall
Дата 21.5.2013, 16:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Доброго всем времени суток. Приобрел себе Mac и решил изучить Objective-C чтобы писать программки, и на одном примере завис конкретно.....

Собственно в чем проблема то, в том что при выполнении этого кода, напишу в Си так как он и в Си не исполняется, но IDE при написании ошибку не выдает
толко при выполнении. Ошибкой вот какая: 

Код

0x7fff8e14ce27:  movq   104(%r15), %rax                             <EXC_BAD_ACCESS (code=1, address=0x68)


а вот и сам код:

Код

#include <stdio.h>
#include <string.h>

int main (int argc, const char * argv[]){
FILE * wordFile = fopen("../words.txt", "r");
char word[100];

while(fgets(word, 100, wordFile)){   //  эта ошибка указывает на функцию fgets  <EXC_BAD_ACCESS (code=1, address=0x68)
word[strlen(word)-1] = '\0';
printf("%s состоит из %zd строк\n", word, strlen(word));
}
fclose(wordFile);

return 0;
}//main


если кто знаком с Xcode в Mac и встречался с подобным, буду вам благодарен при много.

За ранее Спасибо всем, кто откликнется.

Это сообщение отредактировал(а) grisWall - 21.5.2013, 17:13
PM MAIL   Вверх
Result
Дата 21.5.2013, 20:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Попробуй проверить, что wordFile != NULL
PM   Вверх
bsa
Дата 21.5.2013, 20:59 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Код
word[strlen(word)-1] = '\0';
здесь надо заменить strlen(word) на sizeof(word) или на 100. Так как в данный момент strlen может выйти за пределы массива. Именно для предотвращения этого и нужна запись нулевого символа.
PM   Вверх
grisWall
Дата 21.5.2013, 22:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(bsa @  21.5.2013,  20:59 Найти цитируемый пост)

Код

word[strlen(word)-1] = '\0';

здесь надо заменить strlen(word) на sizeof(word) или на 100. Так как в данный момент strlen может выйти за пределы массива. Именно для предотвращения этого и нужна запись нулевого символа. 


в том то и дело, что он до этой точки не доход обрывается во время проверки условия цикла


Цитата(Result @  21.5.2013,  20:03 Найти цитируемый пост)
Попробуй проверить, что wordFile != NULL 


да точно, спасибо, я проверил вот таким условием
Код

if ( wordFile != NULL ) printf("True\n");
else {
printf("False\n");
return 0;
}


и он выдал False и завершился. Значит что-то с файлом, или с функцией fopen 
или путь не распознается, но я и здесь (./words.txt) хранить пробовал и даже в (/tmp/words.txt) все равно не работает

а может быть, изо кодировки? я уже не знаю скорее всего это что-то с  fopen  только я читал про его в stdio.h все с ним вроде бы нормально. Вообще не знаю что там в этом Xcode намешали, только эта прога у меня на linux работает на ура и даже ошибок не выдает.... а тут не хочет я не знаю че делать, а gcc из консоли вызвать, так его вообще в системе нет только через это не нормальное IDE приходится ваще бред.  Кто знает как решить отпишите плиз.

Это сообщение отредактировал(а) grisWall - 21.5.2013, 22:53
PM MAIL   Вверх
volatile
Дата 22.5.2013, 00:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 16
Всего: 85



Цитата(grisWall @  21.5.2013,  22:43 Найти цитируемый пост)
Кто знает как решить отпишите плиз

Ваша программа знает.

Цитата(grisWall @  21.5.2013,  16:56 Найти цитируемый пост)
FILE * wordFile = fopen("../words.txt", "r");
if (!wordFile) printf("error: %u\n", errno);

Далее, по документации, смотрите что означает сия ошибка.

Если просветления все еще не настало, то постите сюда ваши изыскания
PM MAIL   Вверх
grisWall
Дата 22.5.2013, 08:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(volatile @  22.5.2013,  00:15 Найти цитируемый пост)
Цитата(grisWall @  21.5.2013,  16:56 )
FILE * wordFile = fopen("../words.txt", "r");
if (!wordFile) printf("error: %u\n", errno);

Далее, по документации, смотрите что означает сия ошибка.

Если просветления все еще не настало, то постите сюда ваши изыскания 


да я проделал и мне выдало error: 22

а что это значит я и в душе не знаю....не подскажете где это глянуть


Это сообщение отредактировал(а) grisWall - 22.5.2013, 08:50
PM MAIL   Вверх
Result
Дата 22.5.2013, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



В errno.h
Код

#define EINVAL        22        /* Invalid argument */


далее гугол smile
PM   Вверх
volatile
Дата 22.5.2013, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 16
Всего: 85



Цитата(grisWall @  22.5.2013,  08:49 Найти цитируемый пост)
а что это значит я и в душе не знаю....


вот так выдаст словесное описание.
Код

#include <string.h> 
...
if (!wordFile) printf("error: %s\n", strerror (errno));


да еще, попробуйте задать абсолютный путь к файлу "/Users/User/тра-ля-ля/words.txt"
PM MAIL   Вверх
grisWall
Дата 24.5.2013, 03:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



все уже перепробовал ни че не помогает короче ну его. Мне кажется, что это какой-то баг в IDE(Xcode Mac-овской) с fopen, или же с кодировкой что-то не то.
Но в любом случае, всем кто откликнулся большое человеческое, многое узнал, пока разбирался. Если кто еще знает, что может быть, или сталкивался с такой проблемой и знает решение, с удовольствием выслушаю, и буду признателен до предела, спасибо всем. Но в общем-то Objectiv-C фуфло полное, ну по крайней мере, мне так показалось, может быть рано судить о языке, встретив первый баг и не изучив его полностью, но мне как то больше привычнее C++. На мой взгляд, он более практичнее и эффективнее в решении конкретных задач, но в качестве эксперимента решил попробовать, и вот на тебе напоролся так сказать на мину. Да и синтаксис у него более изящный и логичный, короче удобно и все. Хотя я не сразу к нему тоже привыкал. Но сейчас уже, не променяю его на какой-то там Objective. 
PM MAIL   Вверх
bsa
Дата 24.5.2013, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



grisWall, скорее всего, ты неправильный путь к файлу указал.
Кстати, твой код написан на C. Как ты можешь делать выводы о Objective-C, когда им даже не пользовался?
PM   Вверх
vcgraf
Дата 9.10.2013, 06:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



У меня и не только у меня (и судя по англоязычным форумам), возникли те же проблемы с этим кодом программы из книги "Objective-C 2.0 и программирование для Мас" М. Далримпла и С. Кнастера. Это, по-видимому, проблема с авторским  файлом, который идет вместе с примером программного кода. Я сделал свой текстовый файл в редакторе TextWrangler и прописал путь к нему в окне настроек XCode 5.0, который открывается из пунктов меню Product->Scheme->Edit Scheme Путь вводится во вкладке Arguments: раздел Arguments Passed On Launch (нажать "+" для того, чтобы появилось поле для ввода). После этого программа стала работать.


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

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


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




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


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

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