Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Другие темы раздела
C (СИ) Определить сумму нечетных элементов матрицы и найти строку с минимальной их суммой https://www.cyberforum.ru/ c-beginners/ thread1679862.html
Здравствуйте, очень нужна помощь с написанием программы, для меня тема указателей очень больная, так как я не совсем понимаю ее. Суть задания какова: В каждой строке прямоугольной матрицы,...
C (СИ) Найти определенный символ в строке
Добрый день Предположим я ввожу в консоли b=3 Как программа может обнаружить "="? Заранее благодарен за ответ
C (СИ) Разложить формулу методом итерации
Добрый день Пытаюсь разложить данную формулу методом итерации (картинка во вложении, не мог записать с помощью редактора формул) Я понимаю когда например начинаю работать с простыми числами...
C (СИ) Ошибка в кодировщике Не знаю, как сделать так чтобы, когда bukvaed считывает пустоту он выдавал пустоту, файлы tablwin,tablcp,tabliso содержат в себе соответствующие кодировочные таблицы: Windows-1251,CP866,ISO8859-5,... https://www.cyberforum.ru/ c-beginners/ thread1679739.html
C (СИ) Подсчитать результат, выполняя арифметические операции в порядке их следования https://www.cyberforum.ru/ c-beginners/ thread1679737.html
Подсчитать результат, выполняя арифметические операции в порядке их следования Выражение ввести с консоли. Например, при вводе 6*4-15/3 Выход: 3 Пожалуйста, с комментариями
Численные библиотеки. Numerical recipes. IMSL C (СИ)
ищу инФОРМАцию про эти библиотеки. ничего путевого не могу найти, нашел только пару книг на английском, но тольком ничего из них не понял.
Как отсортировать массив целых рандомных чисел по негативным и позитивным числам? C (СИ)
Условия задачи. Нужно создать массив целых чисел размером в 100 элементов. Они заполняются рандомно от -100 до 100.Это я знаю.А вот дальше нужно все позитивные элементы разместить в левой части...
C (СИ) Поочередно вызвать обе функции через один указатель к примеру есть перегруженная функция void f(int a,int b) { printf("%d %d" ,a, b); } void f(float a,int b , float c) { printf("%f %d %f" ,a, b,c); } https://www.cyberforum.ru/ c-beginners/ thread1679650.html
C (СИ) Qsort не сортирует массив https://www.cyberforum.ru/ c-beginners/ thread1679611.html
Здравствуйте, у меня небольшая проблема, qsort не сортирует массив, подскажите где у меня ошибка. int compare(const void * a, const void * b) { if ((int)a > (int)b) return 1; if ((int)a <...
C (СИ) Разбор побитовых операторов Здравствуйте! Есть функция: int setbits(int x, int p, int y, int n){ return x | ((y & ~( ~0 << n )) << (p + 1 - n)); } Помогите разобрать, что делает эта программа? Просто по порядку... https://www.cyberforum.ru/ c-beginners/ thread1679580.html
С чаем беда...
Эксперт CЭксперт С++
6783 / 3317 / 898
Регистрация: 18.10.2014
Сообщений: 6,574
08.03.2016, 20:00 0

Почему malloc работает не так, как ожидается?

08.03.2016, 20:00. Просмотров 1346. Ответов 13
Метки (Все метки)

Ответ

Уже сто раз об этом писали в соседней ветке
Память освобождается, но значение остается
Память освобождается, но значение остается

Защита памяти от некорректного доступа выполняется на уровне ОС. Библиотека времени выполнения (БВВ) не передает каждый из ваших 'malloc'-ов в ОС, а просто сначала запрашивает у ОС один большой блок памяти, внутри которого уже БВВ сама занимается раздачей памяти под ваши маленькие объекты. Поэтому пока вы своим некорректным доступом попадаете внутрь этого большого блока, нарушения защиты памяти происходить не будет (с точки зрения ОС все в порядке) и будет даже казаться, что "все работает".

А сделайте ваш индекс побольше - так, чтобы доступ вылез за пределы изначально запрошенного у ОС блока памяти - и этот пример сразу же накроется медным тазом, потому что сработает защита памяти уровня ОС.

Разумеется, говорить, что исходный пример "работает" - наивная ерунда. Поведение программы в любом случае не определено. Вы лезете в память, которая вам не принадлежит и с рук вам это сходит только в вашем искуственном микроскопическом примере. В реальной программе дело закончится существенно более печально: либо вы разрушите "чужие" данные, либо в будущем новый запрос памяти будет размещен в этом месте и разрушит ваши данные.

Добавлено через 3 минуты
Цитата Сообщение от Хрисипп Посмотреть сообщение
вообще тут интересные вещи происходят. Когда ты обратился к элементу несуществующего массива, создался этот массив, но он забрал все доступное ему место
Ничего подобного здесь, разумеется, не происходит и никакого массива, который "забрал все доступное ему место" не создается. Все здесь просто, банально и уже давно разжевано вдоль и поперек. Непонятно, почему такие темы до сих пор вызывают у кого-то такое недоумение.

Вернуться к обсуждению:
Почему malloc работает не так, как ожидается?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.03.2016, 20:00

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

ConstraintSet работает не так как ожидается в Handler
Делаю визуализацию сортировки. Сначала хочу реализовать swap. Два элемента подсвечиваются красным,...

Условие в цикле do while работает не так, как ожидается
Проблема в условие цикла. Вот Код.// ConsoleApplication4.cpp: определяет точку входа для...

Нюансы работы с массивами: почему программа ведёт себя не так, как ожидается?
// ConsoleApplication20.cpp: определяет точку входа для консольного приложения. // #include...

Нюансы работы с оператором ветвления if else: почему программа ведёт себя не так, как ожидается?
Имеется код: int a; char q; for (;;) { cout &lt;&lt; &quot;Введите число: &quot;; cin &gt;&gt; a;

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