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

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

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

Работа с указателями: подскажите что я не так делаю - C++

17.02.2009, 19:18. Просмотров 782. Ответов 5
Метки нет (Все метки)

Добрый день

Подскажите пожалуйста что в этой программе не так

C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
 
using namespace std;
 
void main()
{
    char* t = "test";
 
    *(t+1) = 'a';
}
При выполнении выдаётся ошибка:
Unhandled exception at 0x00b714e8 in TestWin32ConsoleApp.exe: 0xC0000005: Access violation writing location 0x00b77801.

Что же здесь неправильно?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.02.2009, 19:18     Работа с указателями: подскажите что я не так делаю
Посмотрите здесь:

Подскажите, что я делаю не так - C++
Вот задача: Написать программу, по длинам сторон распознающую среди всех треугольников АВС прямоугольные. Если таковых нету, то вычислить...

Подскажите что я делаю не так? - C++
Дан массив целых чисел. Все его элементы уменьшить на 20 #include &lt;iostream&gt; using namespace std; int f(const int*mas, const int...

Подскажите, что делаю не так - C++
Нужно написать прогр позволяющую юзеру с помощью пунктов меню найти сумму, разность и остаток от целочисленного деления двух целых чисел....

Подскажите что я не так делаю - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;stdlib.h&gt; #include &lt;time.h&gt; #include &lt;iomanip&gt; #include &lt;math.h&gt; ...

Ввод символьной строки. Подскажите что делаю не так? - C++
Подскажите что делаю не так? char model; хочу что бы модель можно было ввести спробелами. меняем на string mondel; значит...

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

Что не так с этими указателями? - C++
Всем привет, прошу помощи разобраться в коде. Недавно начал изучать C++ по книге Лафоре. В главе с указателями есть пример со связными...

Что я делаю не так? - C++
Всем привет Помогите пожалуйста, Вот задача : Начав тренировку спортсмен первый день пробежал 10км. Каждый день он увеличивал норму...

что не так делаю?! - C++
почему не правильно! помогите! #define SIZE 4 #include&lt;iostream.h&gt; int main() { int matrix; for (int i=0; i&lt;0; i++) ...

Что не так при работе с указателями? - C++
Здравствуйте! Начинаю изучать работу с указателями. #include &lt;iostream&gt; using namespace std; int fun(int a, int b, long...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Otaka
1823 / 679 / 18
Регистрация: 11.12.2008
Сообщений: 1,019
17.02.2009, 19:23     Работа с указателями: подскажите что я не так делаю #2
Ну, тут, наверное, смотря какой компилятор. С++Билдер, например, все делает и test превращается tast.
Vourhey
Почетный модератор
6477 / 2252 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
17.02.2009, 19:24     Работа с указателями: подскажите что я не так делаю #3
Что же здесь неправильно?
char* t = "test";
говорит о том, что это указатель на константную строку. Ее нельзя менять. Прога должна вылетать с ошибкой записи в память.
В общем, правильно будет так:
C++
1
2
3
4
   char *s = (char*)malloc(10);
   strcpy(s,"test");
   *(s+1) = 'a';
   cout<<s<<endl;
voff4igg
0 / 0 / 0
Регистрация: 15.02.2009
Сообщений: 11
17.02.2009, 20:07  [ТС]     Работа с указателями: подскажите что я не так делаю #4
Я использую Visual Studio 2008 (Visual C++ 2008 ). Видимо оттуда и ноги растут...

Но если сделать так....

C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
 
using namespace std;
 
void main()
{
    char t[] = "test";
 
    *(t+1) = 'a';
    cout << t << endl;
}
, то всё работает замечательно. Ничего не могу понять, где же грабли.
Alexiski
Любитель давать советы
339 / 131 / 2
Регистрация: 12.01.2009
Сообщений: 511
17.02.2009, 20:17     Работа с указателями: подскажите что я не так делаю #5
Но ведь уже объяснили, в чем дело. Строка хранится в области констант, и совершенно правильно что компилятор в нее писать не разрешает.

Разница между примерами в том, что в первом случае создается указатель, он инициируется адресом константной строки. Во втором случае создается массив, который инициируется константной строкой. При этом массив реально создается в стеке, а строка в него копируется.
Vourhey
Почетный модератор
6477 / 2252 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
17.02.2009, 20:21     Работа с указателями: подскажите что я не так делаю #6
Блин, я выше для кого писал? В первом случае ты объявляешь указатель на константную строку. У тебя указатель на "string constant". А во втором у тебя массив символов. Указатель на первый элемент массива символов. Память доступна для записи.
Yandex
Объявления
17.02.2009, 20:21     Работа с указателями: подскажите что я не так делаю
Ответ Создать тему
Опции темы

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