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

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

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

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

17.02.2009, 19:18. Просмотров 791. Ответов 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.

Что же здесь неправильно?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.02.2009, 19:18
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Работа с указателями: подскажите что я не так делаю (C++):

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

подскажите что не так делаю? - C++
кароче пишу модуль простейший //module #include&lt;stdio.h&gt; #include&lt;conio.h&gt; int i; int function(int a) {

Подскажите что я делаю не так? - 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; значит...

5
Otaka
1824 / 680 / 18
Регистрация: 11.12.2008
Сообщений: 1,019
17.02.2009, 19:23 #2
Ну, тут, наверное, смотря какой компилятор. С++Билдер, например, все делает и test превращается tast.
0
Vourhey
Почетный модератор
6482 / 2256 / 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;
0
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;
}
, то всё работает замечательно. Ничего не могу понять, где же грабли.
0
Alexiski
Любитель давать советы
339 / 131 / 2
Регистрация: 12.01.2009
Сообщений: 511
17.02.2009, 20:17 #5
Но ведь уже объяснили, в чем дело. Строка хранится в области констант, и совершенно правильно что компилятор в нее писать не разрешает.

Разница между примерами в том, что в первом случае создается указатель, он инициируется адресом константной строки. Во втором случае создается массив, который инициируется константной строкой. При этом массив реально создается в стеке, а строка в него копируется.
0
Vourhey
Почетный модератор
6482 / 2256 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
17.02.2009, 20:21 #6
Блин, я выше для кого писал? В первом случае ты объявляешь указатель на константную строку. У тебя указатель на "string constant". А во втором у тебя массив символов. Указатель на первый элемент массива символов. Память доступна для записи.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.02.2009, 20:21
Привет! Вот еще темы с ответами:

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

Что-то не то с Майкрсофт визуал студио 2010 или я что-то не так делаю - C++
Дело в том что при запуске вот этой программы: #include &lt;iostream&gt; using namespace std; int main () { for (int i=100; i&lt;=999;...

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

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


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

Или воспользуйтесь поиском по форуму:
6
Yandex
Объявления
17.02.2009, 20:21
Ответ Создать тему
Опции темы

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