Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
OLLEGATOR
Linux-оид
116 / 65 / 3
Регистрация: 15.02.2011
Сообщений: 353
#1

Ошибка strcat ...segmentation fault - C++

30.08.2011, 00:59. Просмотров 972. Ответов 3
Метки нет (Все метки)

имеется функция показывает что segmentation fault(только в режиме дебага) в красных строках...а при компиляции ошибки не показывает...странно..подскажи ошибка в строке 32 и 43

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
void Fix_Grub(char *weight_and_hight){ // Правим Grub...
 
    FILE *f=fopen("/etc/default/grub","r");
    if(!f) printf("Ошибка: fix grub 1");
 
    fseek(f,0,SEEK_END); // Чтобы узнать кол-во символов...указатель в конец...
 
    int kolvo=ftell(f);
 
    char *temp=malloc(kolvo*sizeof(char)); // Для первого считывания...
 
    fseek(f,0,SEEK_SET); // Возвращаем указатель в начало...
 
    fread(temp,sizeof(char),kolvo,f); // Считали содержимое grub...
 
    char *target="GRUB_CMDLINE_LINUX_DEFAULT=\"quiet splash\""; // Что ищем на замену...
    char *target_2="#GRUB_GFXMODE=640x480"; // Правим дальше граб...
    char *one="GRUB_CMDLINE_LINUX_DEFAULT=\"quiet splash nomodeset video=uvesafb:mode_option="; // Сначала ставим это
    char *two=",mtrr=3,scroll=ywrap\""; // потом weight_and_hight, а потом two...
    char *three="GRUB_GFXMODE="; // Последняя вставка...
 
    char *ready_1=malloc((strlen(temp)-strlen(target)+strlen(one)+strlen(weight_and_hight)+strlen(two)+1)*sizeof(char)); // Для первой поправки...
    char *t; // Указатель поиска...
 
    strcpy(ready_1,""); // Чистка...
    t=strstr(temp,target); // Сдвигаем указатель до нужного момента...
 
    strncat(ready_1,temp,t-temp); //Скопировать всё что нам подходит...
    strcat(ready_1,one);                //  Подгонка под
    strcat(ready_1,weight_and_hight);   //   наше
    strcat(ready_1,two);                //  разрешение...
    strcat(ready_1,t+strlen(target));// Дописываем всё после нашей вставки...теперь Ready_1 содержит первое исправление..приступаем ко второму )) 
    strcat(ready_1,"\0"); // Завершение строки...
 
    char *release=malloc((strlen(ready_1)-strlen(target_2)+strlen(three)+strlen(weight_and_hight)+1)*sizeof(char)); // Результат...
 
    strcpy(release,""); // Чистка...
    t=strstr(ready_1,target_2); // Сдвигаем указатель до нужного момента...
 
    strncat(release,ready_1,t-ready_1); // Копируем предыдущую обработанную инфу...
    strcat(release,three);                  // Подгонка
    strcat(release,weight_and_hight);       // под
    strcat(release,t+strlen(target_2));     // наше разрешение... 
    strcat(release,"\0"); // Завершение строки...
    fclose(f); // Закрываем что-бы его переписать...
 
    FILE *f_2=fopen("/etc/default/grubqwerty","w");
    if(!f_2) printf("Ошибка grub! В создании результата...");
 
    fwrite(release,sizeof(char),strlen(release),f_2); // Перезаписываем grub...
    fclose(f_2);
 
    free(release);
    free(ready_1);
    free(temp);
 
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.08.2011, 00:59
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ошибка strcat ...segmentation fault (C++):

Ошибка Segmentation fault - C++
Всем доброго дня. Люди добрые, помогите, кто чем может. При вызове метода hand.dealToPlayers(0) или hand.dealToPlayers(1) ошибок нет,...

Ошибка выполнения Segmentation fault при открытии файла - C++
Привет всем! почему не открывается файл, не понимаю что такое? ubuntu 16, qt creator 3.6.1 #include <string> #include <iostream> ...

Ошибка "Segmentation fault" при организации дерева - C++
Есть следующие функции Three сreateThree(Node **q) { if((*q)->p) { Three *one, *two; one =...

Segmentation fault - C++
Доброго времени суток. Есть 2 класса. object class object{ void (*f)(object*); public: void setFunc(void...

Segmentation fault - C++
Почему при таком варианте происходит Segmentation fault? vec3f trace(const Scene& scene, const Ray& ray) { const RenderObject*...

Segmentation fault - C++
Пытаюсь реализовать генетический алгоритм на с++. Всего существует два класса: GeneticEngine, FitnessFunction. Класс FitnessFunction...

3
grizlik78
Эксперт С++
1963 / 1456 / 118
Регистрация: 29.05.2011
Сообщений: 3,015
30.08.2011, 01:12 #2
В строках 28 и 40 похоже на ошибку, ведь strncpy не добавляет завершающий строку символ '\0', если скопировано заданное количество байтов.
То есть после них надо бы добавить
C++
1
ready_1[t - temp] = '\0';
и
C++
1
release[t - ready_1] = '\0';
соответственно.
Ну и проверку результата поиска тоже бы стоило сделать.

Добавлено через 1 минуту
А строки 33 и 44 бесполезны, кстати. Они вообще ничего не делают.
0
OLLEGATOR
Linux-оид
116 / 65 / 3
Регистрация: 15.02.2011
Сообщений: 353
30.08.2011, 01:23  [ТС] #3
добавил ваши строки программа на них начала ругаться....а strcat(release,t+strlen(target_2)); у меня раньше работали я просто наклацал что-то...не по теме наверное...
0
grizlik78
Эксперт С++
1963 / 1456 / 118
Регистрация: 29.05.2011
Сообщений: 3,015
30.08.2011, 11:36 #4
Ну так поиск подстроки точно успешно заканчивается?
0
30.08.2011, 11:36
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.08.2011, 11:36
Привет! Вот еще темы с ответами:

Segmentation fault - C++
Кусок кода: template <typename Type> class Queue { private: struct Elem { Elem*...

Segmentation fault - C++
Здравствуйте. Нужно динамически получить такое: char * a = {"abc", NULL}; Пробую: char ** a; a = new char*; a = new char; ......

Segmentation fault - C++
Всем привет. Пишу быдлокод для лабы в универе. Мне по определенному алгоритму необходимо получить из одного поколения особей, новое. ...

Segmentation fault - C++
Пишу лабу для универа. В общем необходимо использовать только свои функции, никаких, str... подобных функций использовать нельзя. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru