Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.02.2009, 02:03   #1
grook
Новичок
Джуниор
 
Регистрация: 28.02.2009
Сообщений: 1
По умолчанию Проблема с многоуровневой адресацией

Вот простейший пример программы:
Код
Код:
#include <stdio.h>
void fun(int **a, int **b)
{
    int *p,*q;a=&p;b=&q;
    *p=10; 
    *q=2; 
}
void main()
{
    int **z, **j;
    fun(z,j);
    printf("%d",**z);
}

т.е. надо передать в функцию указатель на указатель, произвести некие действия по адресу и вывести в главной функции.
VS 6 вылетает и предлагает отправить отчёт без объяснений, а под линуксом gcc пишет segmentation failed.
Кто может помочь с решением проблемы?
grook вне форума Ответить с цитированием
Старый 28.02.2009, 08:18   #2
Blade
Software Engineer
Участник клуба
 
Аватар для Blade
 
Регистрация: 07.04.2007
Сообщений: 1,618
По умолчанию

Память, выделенная для указателей *p и *q освобождается, после завершения функции fun(), т.к. переменные p и q - локальные. Следовательно уничтожаются значения, на которые они указывали (10 и 2)
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария
Blade вне форума Ответить с цитированием
Старый 28.02.2009, 13:08   #3
Night_Light
Пользователь
 
Регистрация: 26.02.2009
Сообщений: 14
По умолчанию

Код:
#include <stdio.h>
void fun(int ***a, int ***b)
{
    int *p,*q;
    int **p1,**q1;
    p = new int(10); 
    q = new int (2);
    p1 = new (int*);
    q1 = new (int*);
    
    *p1 = p;
    *q1 = q;

    *a=p1;*b=q1;
}
void main()
{
    int **z, **j;
    fun(&z,&j);
    printf("%d",**z);
    delete *z;
    delete *j;
    delete z;
    delete j;
}
P.S. Лучше не извращайся так

Последний раз редактировалось Night_Light; 28.02.2009 в 14:19.
Night_Light вне форума Ответить с цитированием
Старый 18.12.2010, 17:15   #4
Dikonya
Новичок
Джуниор
 
Регистрация: 18.12.2010
Сообщений: 1
По умолчанию

Тема: Разработать программу «Кубики» методом максимального потока.
Исходные данные:
Имеется набор из N детских кубиков. На каждой из шести граней каждого кубика написана буква. Требуется сложить из данного набора определенное слово.
Составить программу на языке программирования Паскаль, моделирующую описанный процесс и выводящий результат.
При моделировании процесса следует рассмотреть два варианта:
* разные буквы могут находиться на одном и том же кубике, и тогда невозможно использовать обе буквы в слове;
* одна и та же буква может встречаться на разных кубиках.
Исходные данные о наборе кубиков следует вводить с клавиатуры в виде массива элементов, каждая строка которого будет хранить сведения о буквах, расположенных на одном из кубиков и заноситься в файл на диске. Количество кубиков варьируется и вводится с клавиатуры.
Для удобства пользователя следует ввод каждого кубика организовать в отдельной строке, сопроводив его пояснениями. Слово, которое требуется сложить, также вводится отдельно. Предусмотреть возможность исправления данных о кубике.
Так как набор кубиков может быть огромным (до 200), то следует учитывать при описании переменных экономию памяти.

Последний раз редактировалось Dikonya; 18.12.2010 в 17:16. Причина: не дописала
Dikonya вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с рамами/Проблема с ЖД DRAGGER Компьютерное железо 6 04.01.2009 23:37
Проблема с gets() TheWanderer Общие вопросы C/C++ 12 21.11.2008 14:35
Проблема Vanek B Общие вопросы Delphi 4 17.12.2006 13:30