Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
 Аватар для defer
577 / 256 / 18
Регистрация: 29.11.2010
Сообщений: 868

Как это работает?

25.06.2012, 23:35. Показов 1124. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
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
#include <iostream>
#include <cstring>
using namespace std;
 
int main()
{
    char* s=new char[100];
    s="Jonessssssssssssssssssssssss";
    char* l =new char[100];
    l="Doe";
 
    l=s;
    cout << s << endl;
    cout << l << endl;
 
    delete[] s;
    delete[] l;
 
    char* d=new char[100];
    d=l;
    cout << d << endl;
    cout << sizeof s << endl;
    cout << l << endl;
    return 0;
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.06.2012, 23:35
Ответы с готовыми решениями:

Как это работает? Я хочу спросить как работает C++ и где можно про него почитать
Привет, котоны. Заранее благодарю. Это будет моих общих вопросов нить, т.к. создавать целую ветку для каждого нецелесообразно. Я хочу...

Русификация.Работает-супер! Обьяснитте, как это работает?
#include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;windows.h&gt; using namespace std; char* Rus(const char* text); int main () ...

Как это работает?
Читаю я кое какой &quot;учебник&quot;, и в нём появился такой вот кусок кода int input (tank&amp; t, char map) { char act; int ch; int e =...

14
Мастер кустарных методов
 Аватар для LEQADA
232 / 227 / 17
Регистрация: 09.11.2010
Сообщений: 680
25.06.2012, 23:54
На GCC 4.6.1 не компилируется из-за предупреждений.
deprecated conversion from string constant to <char*> [-Wwrite-strings]
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
25.06.2012, 23:59
Цитата Сообщение от defer Посмотреть сообщение
delete[] s;
delete[] l;
Рано удаляешь.
0
 Аватар для Toshkarik
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
26.06.2012, 00:01
Тут в принципе удалять нельзя, вообще не верная работа с динамической памятью.
0
 Аватар для defer
577 / 256 / 18
Регистрация: 29.11.2010
Сообщений: 868
26.06.2012, 00:03  [ТС]
Цитата Сообщение от LEQADA Посмотреть сообщение
На GCC 4.6.1 не компилируется из-за предупреждений.
Компилируется и с -Wall и с-Pedantic-errors


Цитата Сообщение от alsav22 Посмотреть сообщение
Рано удаляешь.
вопрос: почему работает?
0
 Аватар для Toshkarik
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
26.06.2012, 00:09
Цитата Сообщение от defer Посмотреть сообщение
char* s=new char[100];
Здесь выделяется память в 100 байт, и адрес первого байта присваивается указателю.
Вот тут
Цитата Сообщение от defer Посмотреть сообщение
s="Jonessssssssssssssssssssssss";
указатель меняет свое значение, и начинается указывать на строковый литерал. Мало того, что теряется выделенная память 100 байт, что приводит к утечке, так еще и указатель не-const, что приводит к неопределенному поведению, так как строковый литерал сам по себе константный.
А вот тут скорей всего будет crash:
C++
1
2
delete[] s;
delete[] l;
0
бжни
 Аватар для alex_x_x
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
26.06.2012, 00:10
Цитата Сообщение от defer Посмотреть сообщение
вопрос: почему работает?
потому что везет, хотяяя

Bash
1
2
3
Jonessssssssssssssssssssssss
Jonessssssssssssssssssssssss
memory clobbered before allocated block
Добавлено через 1 минуту
я почти уверен, что если MALLOC_CHECK_ выставить в двойку, то программа радостно грохнется
0
 Аватар для Toshkarik
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
26.06.2012, 00:10
Цитата Сообщение от defer Посмотреть сообщение
Компилируется и с -Wall и с-Pedantic-errors
Тут, скорей всего, имелось ввиду с -Werror.
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
26.06.2012, 00:17
Из-за delete виснет.
0
бжни
 Аватар для alex_x_x
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
26.06.2012, 00:26
код неправильный - это очевидно
смысл обсуждать последствия
0
 Аватар для defer
577 / 256 / 18
Регистрация: 29.11.2010
Сообщений: 868
26.06.2012, 00:27  [ТС]
Цитата Сообщение от alsav22 Посмотреть сообщение
Из-за delete виснет.
какой компилятор?

Добавлено через 43 секунды
Цитата Сообщение от alex_x_x Посмотреть сообщение
код неправильный - это очевидно
смысл обсуждать последствия
Проблема в том, что он работает
0
 Аватар для Toshkarik
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
26.06.2012, 00:29
Вам уже сказали, что это всего лишь дело случая. Вам просто повезло, у данного кода неопределенное поведение, оно может быть каким угодно.
0
бжни
 Аватар для alex_x_x
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
26.06.2012, 00:30
Цитата Сообщение от defer Посмотреть сообщение
Проблема в том, что он работает
в чем проблема?
стандарт на такое говорит, что после таких действий программа может отформатировать ваш винчестер и будет права
undefined behavior и ее никто не ограничивает
0
 Аватар для Toshkarik
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
26.06.2012, 00:30
Вот можете посмотреть, что происходит на gcc 4.7.1. Да и на нем при определенных условиях возможна "правильная" работа, тут не столько от компилятора, сколько, опять же, от случая зависит.
0
11 / 7 / 1
Регистрация: 30.05.2012
Сообщений: 113
26.06.2012, 00:59
Вот немного подправил , здесь можно удалять, все будет работать.
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
#include <iostream>
#include <cstring>
using namespace std;
 
int main()
{
    char* s=new char[100];
    strcpy(s,"Jonessssssssssssssssssssssss");
    char* l =new char[100];
    strcpy(l,"Doe");
//    l=s;   //?? Адресу указателя l присваевается адрес указателя s 
    //тоесть два указателя указывают на одну и туже ячейку дважды  delete не пройдет
    cout << s << endl;
    cout << l << endl;
 
    delete[]s;
 //   delete[]l;
 
    char* d;//=new char[100];
    d=l;
    cout << d << endl;
    cout << sizeof s << endl;
    cout << l << endl;
    delete[]d; //  l мы удалили тоже
return 0;
 
}
нужно использовать strcpy для инициализации строковых переменных. и если присваивать указатель указателю d=l; то не обязательно выделять сразу под него память.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.06.2012, 00:59
Помогаю со студенческими работами здесь

Как это работает?
Здравствуйте, можете, пожалуйста, поэтапно объяснить как работает приведенный ниже фрагмент кода? Что такое floor, return, ceil? double...

Как это работает?
Не могу понять, как это работает: #include &lt;iostream&gt; using namespace std; int main() { int ar = {1, 2, 3, 4}; ...

Как это работает
Здравствуйте уважаемые форумчане!Как это работает? Как например предотвратить выход за приделы допустимых значений переменных!? ...

Как это работает?
Доброго времени суток. Граждане программисты, подскажите пожалуйста как работает данный кусок кода??? А точнее дружественные функции...

Как это работает?
#include &lt;iostream&gt; int *fun() { int a = 5; return &amp;a; } int main() { int *ptr = fun(); std::cout &lt;&lt;...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG-файла с альфа-каналом с помощью библиотеки SDL3_image на Android
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru