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

Можно ли несколько раз делитить область памяти? - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Задачи по C++ http://www.cyberforum.ru/cpp-beginners/thread387258.html
Пользователь вводит два числа в которых по 200 символов и сумирует их и должен выводица ответ!!
C++ Написать программу для функции Написать программу для функции http://www.cyberforum.ru/cpp-beginners/thread387255.html
Что дальше надо сделать, чтобы увидеть исполняемый код страницы? C++
В Visual C++ открыл тестовую страницу MyFirst.cpp Что дальше надо сделать, чтобы увидеть исполняемый код страницы? Прошу помощи. ВикторК, один вопрос - одна тема. И не надо лезть в чужие темы со своими вопросами.
C++ Из заданной последовательности слов удалить слова, содержащие числа
#include <iostream> #include <stdio.h> #include <malloc.h> #include <stdlib.h> #include <string.h> using namespace std; int main() { int dl,i,j,z; char s1="145dfghy5eryyjhdrtywey",s2="",s3="1234567890";
C++ Инициализировать массив http://www.cyberforum.ru/cpp-beginners/thread387222.html
Довольно примитивный вопрос. Помогите инициализировать двумерный массив Aтаблицей 01011 10000 01000 11000 00000 11000 Спасибо...
C++ Как сравнить char и const char? Очередной раз столкнулся с проблемкой, сравнивая объекты из массива (char) нужно сравнить с const char, но в массив я записываю данные с помощью ввода через клавиатуру cin >> buff; и мне нужно сравнить каждый символ в этом массиве делал я так, помещал buff в тело цикла и указал переменную цикла в buff получил ошибку ISO C++ forbids comparison between pointer and integer, почитал в... подробнее

Показать сообщение отдельно
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
19.11.2011, 21:04     Можно ли несколько раз делитить область памяти?
Цитата Сообщение от Bers Посмотреть сообщение
не сказать, что хорошо знаю стандарт, но помойму, там идёт проверка на ноль, а не на NULL
На значение NULL без обращения упоминания имени данного макроса, так как проверять просто на ноль нельзя: если ноль - валидный адрес, то это может привести к невозможности выделить память.

Добавлено через 13 минут
Цитата Сообщение от Bers Посмотреть сообщение
Первый раз delete освобождает память. С этого момента, этот кусок памяти становится "свободным". И система в любой миг может отдать его ещё кому нибудь.
Второй раз delete пытается освободить уже чужую память. И если эта память принадлежит уже кому то там - может произойти порча данных
. Нет. Ни каких чужих данных там быть не может: в многозадачных осях все программы работают в виртуальных адресных пространствах, а освобожденная память из них изымается, то есть виртуальный адрес после освобождения становится столь же невалидным, как и NULL, кусок же памяти по тому же физическому адресу, который как раз может быть выдан кому то ещё, после такого выделения окажется в другом виртуальном адресном пространстве, так как они все локальны, глобальны только физические адреса, а в однозадачной системе просто больше никого нет, кому могла бы быть выдана память по тому же адресу. Опасно же второй раз удалять не подряд, если та же самая прога и тот же её екземпляр успеет получить кусок памяти, на который попадёт тот же адрес.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
... f1(...)
{
 static ... *p;
 ...
 p=new ...;
 ...
 delete [] *p;  // Эта строчка выполнилась дважды в разные вызовы f1, а между ними p попал в память выданную f2
}
... f2(...)
{
 static ... *p;
 ...
 p=new ...; 
 ...
 delete [] *p;
}
. И всё таки дважды делитить можно в единственном случае: если между делитами было ещё одно выделение памяти с того же начального адреса.

Добавлено через 4 минуты
То есть
C++
1
2
3
4
5
6
7
8
int *p;
p=new int [...];
...
delete [] p;
...
p=new int [...];
...
delete [] p;
можно.
 
Текущее время: 03:06. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru