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

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

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

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

30.08.2011, 00:59. Просмотров 951. Ответов 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);
 
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.08.2011, 00:59     Ошибка strcat ...segmentation fault
Посмотрите здесь:

C++ Segmentation fault :(
C++ Segmentation fault
C++ Segmentation fault
Segmentation fault C++
C++ Ошибка "Segmentation fault" при организации дерева
C++ Ошибка Segmentation fault
Segmentation fault C++
Segmentation fault C++
C++ Segmentation fault
Ошибка выполнения Segmentation fault при открытии файла C++
C++ Segmentation fault
C++ Segmentation fault

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

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

Добавлено через 1 минуту
А строки 33 и 44 бесполезны, кстати. Они вообще ничего не делают.
OLLEGATOR
Linux-оид
115 / 64 / 3
Регистрация: 15.02.2011
Сообщений: 353
30.08.2011, 01:23  [ТС]     Ошибка strcat ...segmentation fault #3
добавил ваши строки программа на них начала ругаться....а strcat(release,t+strlen(target_2)); у меня раньше работали я просто наклацал что-то...не по теме наверное...
grizlik78
Эксперт С++
1899 / 1431 / 107
Регистрация: 29.05.2011
Сообщений: 2,986
30.08.2011, 11:36     Ошибка strcat ...segmentation fault #4
Ну так поиск подстроки точно успешно заканчивается?
Yandex
Объявления
30.08.2011, 11:36     Ошибка strcat ...segmentation fault
Ответ Создать тему
Опции темы

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