С Новым годом! Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
2 / 2 / 3
Регистрация: 30.03.2014
Сообщений: 34
1

Ошибка при работе с указателями

16.03.2016, 19:18. Показов 1387. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Дан вот такой кусок кода:
C
1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
 
int main()
{
    char mas[256];
    scanf("%s",mas);
    char **pos;
    *pos=mas;
    printf("Asasas: %p\n",*pos);
    return 0;
}
Прерывает выполнение программы при попытке присвоить *pos указатель на строку str. С чем это связано?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.03.2016, 19:18
Ответы с готовыми решениями:

Программа выпадает в ошибку при работе с указателями
Всем привет. Пишу на C для контроллера. Вырезка из программы ниже. Суть проблемы. При попытке...

MSVS ошибка setlocale при работе с указателями на массивы
Ниже код, пытаюсь нарисовать умножение матриц. До самого умножения еще не дошел, пока только на...

Что не так при работе с указателями?
Здравствуйте! Начинаю изучать работу с указателями. #include &lt;iostream&gt; using namespace...

Как избавиться от * и . при работе с указателями?
Сразу приведу пример: #include &lt;stdio.h&gt; struct struct5 { int* value; }; struct struct4 {...

3
88 / 88 / 80
Регистрация: 25.08.2013
Сообщений: 337
16.03.2016, 20:06 2
Нужно память выделить под указатель на который указывает pos.
Строка
C
1
2
    char **pos;// инициализация по умолчанию (значение *pos не определено)
    *pos=mas;// ошибка
эквивалентна
C
1
2
3
char sym = 'a';
char *ptr;//тоже самое, инициализация по умолчанию (значение *pos не определено)
*ptr = sym;//ошибка
0
2 / 2 / 3
Регистрация: 30.03.2014
Сообщений: 34
16.03.2016, 20:19  [ТС] 3
yrceus, согласен, но задача такова, что требуется указатель на указатель, а именно **pos. При инициализации мы выделяем под pos память.(По сути, создаем переменную, значение которой является адресом на символ). То бишь *pos - это указатель на char-элемент, и имя массива - указатель на первый символ строки.
0
88 / 88 / 80
Регистрация: 25.08.2013
Сообщений: 337
16.03.2016, 20:45 4
Лучший ответ Сообщение было отмечено Teddy17 как решение

Решение

Если просто определить без явной инициализации указатель на указатель, то следующее обращение к значению этого указателя в любом контексте приведет к ошибке. Все равно что использовать не инициализированную переменную. Это тоже что и:
C
1
2
3
char *ptr;
*ptr = a + b;//ошибка (нельзя обратиться к значению не инициализированного указателя)
c = *ptr + d;//таже ошибка
В вашем случае правильно
C
1
2
3
4
5
6
    char arr[] = { 1, 2, 3, 4, 5, 6 };
    char **ptr = (char**) malloc(sizeof(char*));
    *ptr = arr;
    printf("%d\n", (*ptr)[2]);
    printf("%d\n", ptr[0][2]);
    printf("%d\n", *(*ptr + 2));
Добавлено через 15 минут
C
1
2
3
4
5
6
    char *x;
    char **ptr;
    ptr = &x;
    char z = 'z';
    *ptr = &z;
    printf("%x\n", *ptr);
1
16.03.2016, 20:45
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.03.2016, 20:45
Помогаю со студенческими работами здесь

External SIGSEGV при работе с указателями в классе
Lazarus. Имеется реализация списка. unit classlist; {$mode objfpc}{$H+} interface uses ...

Исправить ошибку компиляции C2371 при работе с указателями
Привет :) Проходу тему &quot;Указатели&quot;, написал программу. Компилятор ругается, не знаю почему....

Помогите найти ошибку в коде при работе с указателями
Блин, я когда нибудь пойму эти указатели!!???? Подскажите где ошибся? #include&lt;iostream&gt; using...

Операции с указателями. Использование указателей при работе с динамическими массивами
Дан динамический массив целых чисел {ai} (i=1, 2, ...,n) , целые c и d (c &lt; d). Написать программу...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru