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

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

Войти
Регистрация
Восстановить пароль
 
korrav
0 / 0 / 0
Регистрация: 03.02.2012
Сообщений: 21
#1

Ошибка сегментирования - C++

10.03.2012, 16:53. Просмотров 421. Ответов 4
Метки нет (Все метки)

Здравствуйте. Здесь представлена программа, единственное назначение которой промоделировать поведение другой более сложной программы.
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
#include <stdio.h>
struct test
{
    int count;
    int mode;
    int sampl [3];
} ec, *ec_point=NULL;
int* psampl;
void func( void**);
int main()
{
    int** ptsampl=NULL;
    func(reinterpret_cast< void**>(ptsampl));
    *ptsampl-=2;
        ec_point=reinterpret_cast<struct test*>(*ptsampl);
    printf("cont =%d\nmode =%d\nsampl =%d %d %d\n", ec_point->count, ec_point->mode, ec_point->sampl[0], ec_point->sampl[1], ec_point->sampl[2]);
    return 0;
}
 
void func( void** arg)
{
    for (int i=0; i<3; i++) ec.sampl[i]=i;
    ec.count =0;
    ec.mode=2;
    psampl= ec.sampl;
    arg = reinterpret_cast< void**>(&psampl);
    return;
}
Программа создается без ошибок. Однако при попытке выполнения выскакивает сообщение: Ошибка сегментирования. Пока не могу понять причину этой ошибки. Поэтому надеюсь на вашу помощь. Спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.03.2012, 16:53
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ошибка сегментирования (C++):

Ошибка в коде (Ошибка сегментирования (core dumped) - C++
Добрый день. Подскажите пожалуйста, где ошибка в коде? char ch; string s; while ((ch = cin.get()) != '0' ) ...

ошибка сегментирования - C++
При запуске скомпилированной (gcc) программы выскакивает ошибка сегментирования, а при запуске ее же в дебагере (gdb) -- program exited...

C++ Ошибка сегментирования - C++
Вот листинг файла: #include &lt;fstream&gt; #include &lt;iostream&gt; #include &lt;vector&gt; using namespace std; int main() { char...

Ошибка сегментирования - C++
#include &lt;iostream&gt; #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;unistd.h&gt; #include &lt;fcntl.h&gt; #include &lt;string.h&gt; using...

Ошибка сегментирования. - C++
Всем доброго времени суток! Помогите пожалуйста разобраться в чем дело, пишу программу( суть найти путь в дереве, но думаю это не будет...

Ошибка сегментирования - C++
Написал я быдлокодик, вроде компилируется даже. Но при запуске под Linux'ом вылетает ошибка сегментирования, не могу понять откуда она. ...

4
DU
1483 / 1129 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
10.03.2012, 16:59 #2
в строчке 14 переменная ptsampl указывает на NULL, а вы ее разыменовываете.
функция func ее не изменяет как вы возможно того ожидали.

C++
1
 arg = reinterpret_cast< void**>(&psampl); // это изменение локального указателя.
1
korrav
0 / 0 / 0
Регистрация: 03.02.2012
Сообщений: 21
10.03.2012, 17:26  [ТС] #3
Спасибо за ответ.
0
DU
1483 / 1129 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
10.03.2012, 17:31 #4
проблема не с psampl, а с ptsampl, значение которой передается в функцию func. внутри этой функции идет работа с переменной с именем arg. так вот запись arg = 0; не изменяет то, на что будет указывать ptsampl.

вот простая аналогия:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//если хотите, чтобы функция меняла переменную инт, передавайте ее в функцию по указателю:
 
void f(int* pInt) {*pInt = 0; }
 
int i = 0;
f(&i);
 
 
// если хотите, чтобы функция изменяла переменную типа int*, передавайте ее в функцию
// по указателю
void f(int** ppInt)  {*ppInt = 0; }
 
int* pInt;
f(&pInt);
 
// если хотите, чтобы функция изменяла переменную типа int**, передавайте ее в функцию
// по указателю
void f(int*** pppInt) {*pppInt = 0; }
 
int** ppInt;
f(&ppInt);
1
korrav
0 / 0 / 0
Регистрация: 03.02.2012
Сообщений: 21
10.03.2012, 17:35  [ТС] #5
Спасибо ещё раз. Всё понятно.
0
10.03.2012, 17:35
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.03.2012, 17:35
Привет! Вот еще темы с ответами:

Ошибка сегментирования - C++
Добрый день, возникла проблема: Вот программа, суть из исходного файла у слов удаляется окончание 's' (если оно присутствует), плюс даны...

Ошибка сегментирования - C++
Здравствуйте! Подскажите, пожалуйста, почему программа выводит &quot;Ошибка сегментирования&quot;. #include &lt;stdlib.h&gt; #include &lt;time.h&gt; int...

fprintf ошибка сегментирования - C++
Вот такой код #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;iostream&gt; using namespace std; typedef struct { ...

Ошибка сегментирования (core dumped) - C++
собственно вот такая проблема: при попытке помять строки местами возникает сообщение &quot;Ошибка сегментирования (core dumped)&quot; строки...


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

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

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