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

Как узнать размер массива в динамической памяти? - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Ввод строки в динамический массив http://www.cyberforum.ru/cpp-beginners/thread939088.html
Здравствуйте! Помоги пожалуйста разобраться со следующим: Как с клавиатуры ввести строковый литерал в символьный массив, расположенный в динамической памяти без фиксированного размера? char * ptr = new char; cin >> ptr; //или char * ptr = (char*) calloc(1,1); cin >> ptr; Использование "cin" - обрубает вносимый литерал на пробеле;
C++ Компиляция нескольких файлов Создал проект на wxDevC++ таким образом: потом создал три файла в проекте: coordin.h #ifndef COORDIN_H_ #define COORDIN_H_ struct haha { http://www.cyberforum.ru/cpp-beginners/thread939085.html
C++ .h и .cpp файлы
Если я объявляю в одном .h файле 3 класса, то могу ли я сделать полное определение методов для 3 классов в одном .cpp файле?
Символ новой строки C++
Всем привет) С маппировал текстовый файл в память. HANDLE file = CreateFile(fileNameWChar, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); DWORD fileSize = GetFileSize(file, NULL); HANDLE fileMap = CreateFileMapping(file, NULL, PAGE_READWRITE, 0, 0, NULL); char *pvFileSrc = (char *)MapViewOfFile(fileMap, FILE_MAP_WRITE, 0, 0, fileSize); если в...
C++ Поменять слова в сообщении по принципу: первое со вторым, третье с четвертым и т.д http://www.cyberforum.ru/cpp-beginners/thread939025.html
Помогите, пожалуйста решить задачку с использованием класса string. Я только учусь, и меня пока плохо получается.. Поменять слова в сообщении по принципу: первое со вторым, третье с четвертым и т.д. Вот мои наработки.. Но программа зациклилась и всё убила, пришлось перезапускать компьютер. #include <iostream> #include <cstdlib> #include <conio.h> #include <string> using namespace std;
C++ Необработанное исключение. Нарушение прав доступа при чтении Ребят помогите. В общем есть программа, открывает один файл, ищет в нем последовательности, заменяет на другие. В консоли все прекрасно работает и сохраняет. Сделал интерфейсную программу, с двумя кнопкам "Открыть файл" и "Сохранить файл". В буфер все записывается. Исрользуется динамический массив. Файловые потоки в конце закрываю. Массив удаляю. Действие такое, нажал "Открыть файл"... подробнее

Показать сообщение отдельно
castaway
Эксперт С++
4848 / 2987 / 368
Регистрация: 10.11.2010
Сообщений: 11,028
Записей в блоге: 10
Завершенные тесты: 1
16.08.2013, 21:58     Как узнать размер массива в динамической памяти?
Для всеобщего понимания объясню что хотели сказать во 2-м и 4-м посте.
Дело в том, что размер памяти, выделяемой функциями malloc, calloc, оператором new в C++ и прочими аллокаторами должен где-то храниться. Разумеется в самой выделенной памяти он храниться не может, т.к. запросто затрется другими данными. После блока выделенной памяти он храниться тоже не может, т.к. функция free и оператор delete в C++ просто не смогут его найти, т.к. для того чтобы его найти надо будет знать его размер.
Отсюда следует вывод: самый простой и очевидный способ хранения размера выделенного блока памяти следует хранить перед самим блоком памяти, например: мы выделяем блок памяти размером 10 байт, получаем указатель на выделенную область памяти: 0xaabbccdd, тем самым размер этой области (например 4 байта - 2 в 32-й степени) записывается в адрес 0xaabbccd9, т.е. функция/оператор освобождения памяти уже знает какой именно размер памяти пометить свободным.
Надеюсь кому-то помог мой ликбез.
Стоит обратить внимание, что все это зависит от реализации компилятора. Каждый может вести себя "немного" по-своему...

Добавлено через 59 секунд
Ах да, мораль сей басни такова: узнать безопасно - никак.
 
Текущее время: 23:43. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru