C/C++
Доверяете ли вы создателю языка С++ господину Страуструпу?
Если доверяете, то купите его книгу ЯЗЫК С++ СПЕЦИАЛЬНОЕ ИЗДАНИЕ. Откройте страницу 180 и внимательно осознайте КАК должна строиться работа с динамическим выделением памяти и не гоните ХНЮ, пожалуйста. Интересует мнение заядлых двоечников и "спецов" с высшим образованием

Kurmangazy Segizbayev
издание 2010 от БИНОМ РФ там как раз глава 6.2.6.2 Исчерпание памяти
Kurmangazy Segizbayev
ты хотя бы страничку привёл ради прикола ))
Ещё у C++ имеется богатая стандартная библиотека шаблонов, которая позволяет писать безопасный код не прибегая к ручному выделению динамической памяти и каждый уважающий себя разработчик должен пользоваться её потенциалом.
#include <iostream>
#include <memory>
using namespace std;
int main() {
size_t n = 1000000000;
try {
auto box = shared_ptr<int[]>(new int[n]);
for (auto i = 0U; i < n; ++i) box.get()[i] = i + 1;
for (auto i = 0U; i < n; ++i) cout << box.get()[i] << ' ';
cout.put('\n');
} catch(const bad_alloc& ba) {
cerr << ba.what() << '\n';
}
system("pause > nul");
}
#include <iostream>
#include <memory>
using namespace std;
int main() {
size_t n = 1000000000;
try {
auto box = shared_ptr<int[]>(new int[n]);
for (auto i = 0U; i < n; ++i) box.get()[i] = i + 1;
for (auto i = 0U; i < n; ++i) cout << box.get()[i] << ' ';
cout.put('\n');
} catch(const bad_alloc& ba) {
cerr << ba.what() << '\n';
}
system("pause > nul");
}
Kurmangazy Segizbayev
Понятно и без слов. Потому и советует страуструп тот же не трогать динамику, а изучать STL... Тем не менее если есть NEW и DELETE, то делать правильно сам Бог велел? Зачем поощрать тупизну!?
Мне как-то все равно: доверяю или нет.
Тут или пользуйся или создавай свое. А то есть личности, то сначала пользуются системами, а затем жалуются на создателей, говоря, что слишком высока цена. Ну так создавали бы свое. Защищали бы свое.
Тут или пользуйся или создавай свое. А то есть личности, то сначала пользуются системами, а затем жалуются на создателей, говоря, что слишком высока цена. Ну так создавали бы свое. Защищали бы свое.
Kurmangazy Segizbayev
так я прошу всех почитать того человека, который учит пользоваться языком не только двоечников, но и тех, кто знает, но молчит. Ищи книгу и смтри страницу 180. Там для НЕДОУМКОВ объясняется зачем нужна правильная работа с NEW и DELETE
Не хочу покупать, так что и ответить тебе никто не сможет. У каждого человека за жизнь может и мнение изменится, так что мое сегодняшнее ДА, завтра может быть НЕТ
Kurmangazy Segizbayev
ты прямо как кличок старший - сильно умный
Нет, не доверяю.
Когда сам Страуструп в интервью говорит, что "любит программировать только в Windows", становится ясно, с какой команды он вышел.
Все его "советы" в любой области - это лохотрон от торгаша.
Доверять не стоит.
И кто конкретно писал "его" C++, уже не ясно. ;)
Когда сам Страуструп в интервью говорит, что "любит программировать только в Windows", становится ясно, с какой команды он вышел.
Все его "советы" в любой области - это лохотрон от торгаша.
Доверять не стоит.
И кто конкретно писал "его" C++, уже не ясно. ;)
Kurmangazy Segizbayev
в его же книге, как и от Шилдта обязаны проверять выделение памяти и почему здесь откровенно поощряют ХНЮ не понятно
Скачиваем бесплатно (например с VK) эту книгу Страуструпа "Специальное издание" издательства "Бином". 6.2 там будет на страницах 170-171. Воспользуемся "инспектор"-тестом, то есть напишем код для первой же попавшейся Системы программирования на C++. Вот что я запускаю со своего таблета на платформе Android:
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
int i, n;
for (;;)
{
cout << "n » ";
cin >> n;
try
{
double *a = new double [n];
for (i = 0; i < n; i++) a[i] = i + 1;
cout << a[n - 1] << endl;
delete [] a;
}
catch (bad_alloc) { cerr << "No memory\n"; }
}
}
Всего памяти ОЗУ на этом таблете примерно в два раза больше максимальной рабочей памяти, выделяемой Системой программирования под конкретную задачу, в которую и гигабайт-то кое-как влезает. Вводим требуемое количество восьмибайтных чисел равным, скажем, 200000000 и, конечно же, ничего у нас толком не перехватывается и никакая диагностика в виде No memory при этом не выдаётся, а задача просто слетает с решения. Может, на каком-нибудь Windows всё и работает, как о том в книжке написано, но зато в первой же попавшейся Системе программирования, как показывает опыт, - нет. Вот и верь после этого всяким там книжонкам!.
(◔‿◔)
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
int i, n;
for (;;)
{
cout << "n » ";
cin >> n;
try
{
double *a = new double [n];
for (i = 0; i < n; i++) a[i] = i + 1;
cout << a[n - 1] << endl;
delete [] a;
}
catch (bad_alloc) { cerr << "No memory\n"; }
}
}
Всего памяти ОЗУ на этом таблете примерно в два раза больше максимальной рабочей памяти, выделяемой Системой программирования под конкретную задачу, в которую и гигабайт-то кое-как влезает. Вводим требуемое количество восьмибайтных чисел равным, скажем, 200000000 и, конечно же, ничего у нас толком не перехватывается и никакая диагностика в виде No memory при этом не выдаётся, а задача просто слетает с решения. Может, на каком-нибудь Windows всё и работает, как о том в книжке написано, но зато в первой же попавшейся Системе программирования, как показывает опыт, - нет. Вот и верь после этого всяким там книжонкам!.
(◔‿◔)
Kurmangazy Segizbayev
солнце моё, вы делаете вектор динамический, а разговор про двухзвёздочный коньяк когда в цикле выделяется память построчно и в случае невыделения памяти в середине цикла!!!! Да я сколько раз получал предупреждение от нормально написанных программ ЗАКРЫТЬ все ненужные программы и повторить запуск приложения, что... ЧЕГО ОБЪЯСНЯТЬ ЛЮДЯМ С ВО ???Поздно объяснять уже )))
Kurmangazy Segizbayev
double *a = new double [n];
a= NULL; сейчас попробуем смоделировать невыделение памяти для линейного массива, а в случае матрицы это сбой скажем в середине создания массива и АВАРИЙНЫ ВЫХОД ИЗ ПРОГРАММЫ, А НЕ ВОЗВРАТ СТАНДАРТНОГО И УМНОГО NULL для организации сборки мусора и т. д.
a= NULL; сейчас попробуем смоделировать невыделение памяти для линейного массива, а в случае матрицы это сбой скажем в середине создания массива и АВАРИЙНЫ ВЫХОД ИЗ ПРОГРАММЫ, А НЕ ВОЗВРАТ СТАНДАРТНОГО И УМНОГО NULL для организации сборки мусора и т. д.
Kurmangazy Segizbayev
a= NULL выбрасывает программу аварийно... Хорошо в первой строке, а в 10 из 11??? в 99999 из 100000 double или class какой-нибудь???
Kurmangazy Segizbayev
Кстати в сибилдере ОБЯЗАТЕЛЬНО try catch и в деструкторах предусмотрены пварийные удаления памяти. Как и в STL всё в порядке с памятью, о чём тут Н. Веселуха говорил. Но смысл в чём - если просят динамику, то почему никто об этом даже не заикается? Ни преподы, ни местные мэтры??? Вот в чём вопрос
Kurmangazy Segizbayev
Тем более нужно иможно для обработки таких ситуаций создавать свой обработчик и там уже рисовать и удалять всё что хочешь. Так что проблема с обучением ого-го. А раз задают такие задачки, то и объяснять нужно правильно! Мне один малый указал на некорректное завершение программы и я это запомнил на всю жизнь, что и помогать нужно правильно, а то вся сеть забита клонами ГОВНОКОДА ОТ МЭТРОВ (((
Похожие вопросы
- Почему создатель Linux Линус Торвальдс называет C++ ужасным языком, а ядро ОС Linux пишется только на Си?
- На каком языке программирования (Assembler / С / С++) лучше будет написать компилятор для своего языка программирования?
- ГОСПОДА, нужна помощь по Си!
- Что такое #include <iostream>, std using namespace std В языке программирования C++?
- Чем отличаются языки программирования ???
- Чем лучше язык С языка C++?
- C++ сложный язык?
- Решить задачу на языке СИ
- Написать код на языке си
- Написать программу на языке Си