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

Если выделение памяти для динамического массива задать void-функцией, можно ли будет оперировать с ним в main? - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Как правильно обрабатывать исключения в приложении на базе графического движка? http://www.cyberforum.ru/cpp-beginners/thread1240788.html
Я с исключениями работал только в консольных приложениях - там удобно реализовывался метод бросания интов, которые представляли собой код ошибки, а в catch'е можно было просто сделать соответствующий пойманному значению cout и т.о. сообщить себе, что пошло не так. Сейчас разбираюсь в игровом движке. Соответственно проект не консольный (не знаю, как правильно назвать - наверное просто Win32). И...
C++ Подскажите бесплатный GUI Привет, никак не могу определиться с библиотекой для GUI, маленькие программы писал на WinApi. wxWidgets но их визуальной редактор выносит мозг) Qt платной для статической сборки. Может есть что-то нормальное что не тратить много времени для рисовки GUI ? http://www.cyberforum.ru/cpp-beginners/thread1240785.html
Сохранить одну или несколько картинок в PDF C++
столкнулся с дилемой. Требуется сохранить одну или несколько картинок в PDF (не кричите громко я сам в ужасе. Просто местное казначейство требует прикреплять сканы договора к платежке именно в PDF!!!). сканирование уже написал. Имею BitMap в файле. Как дошло до сохранения в формате PDF - ничего не нашел. Всего и требуется написать несложный парсер только для добавления картинок. Помогите, кто...
Где точка входа приложения? C++
В общем, есть 3 файла. Разбирать их содержимое не нужно, меня интересует только конструкции include. Итак, файл main.cpp: #include <iostream> #include <cstdlib> #include "Point.h" using namespace std; int main() {
C++ Ошибка в калькуляторе "Несоответствие в списке формальных параметров" http://www.cyberforum.ru/cpp-beginners/thread1240765.html
такая ситуация: второй день учу с++, до этого ничего не учил, поэтому прошу помощи. Пытался написать калькулятор: #include <iostream> using namespace std; void kalk_plus () { int a, b, c; cout << "Введите первое число: "; cin >> a; cout << "Введите второе число: ";
C++ Функция должна заменять каждое появление с1 в строке str на с2 Не работает код IDE VC++ 2010 Win7 Прата С. - Язык программирования С++. Лекции и упражнения - 2011 Вопросы для самоконтроля 8. Напишите функцию, имеющую следующий прототип: int replace (char * str, char cl, char c2) ; Эта функция должна заменять каждое появление с1 в строке str на с2 и возвращать количество выполненных замен. подробнее

Показать сообщение отдельно
GetHelp
-8 / 60 / 6
Регистрация: 27.02.2013
Сообщений: 1,112
11.08.2014, 10:44     Если выделение памяти для динамического массива задать void-функцией, можно ли будет оперировать с ним в main?
Цитата Сообщение от Tulosba Посмотреть сообщение
1. В общем случае тип T нельзя копировать через memcpy, т.к. происходит поверхностное (shallow) копирование, т.е. если например T содержит указатель на данные, скопируется только указатель.
бред какой то, чем докажете?
Цитата Сообщение от Tulosba Посмотреть сообщение
2. Нет проверки на ptr == NULL, т.е. в 5 строке может быть UB.
ок if (ptr && *ptr) т.к. if в си поддерживает ленивые вычисления, а читаться в данном случае будет слева на право, то все ок...
Цитата Сообщение от Tulosba Посмотреть сообщение
3. Параметр ptr больше связан с old_size, т.о. его хорошо бы перенести ближе к конце, и так же как для old_size задать умолчание.
в оригинальных malloc, realloc - ptr всегда вначале
Цитата Сообщение от Tulosba Посмотреть сообщение
4. Нет проверки, что old_size <= new_size. Т.е. можем получить выход за границы.
ок... итого получаем
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
template <typename T>
T* allocate(T** ptr, size_t new_size, size_t old_size = 0)
{
    if (old_size > new_size) return nullptr;
    T* retval = new T[new_size];
    if (ptr && *ptr)
    {
        memcpy(retval, *ptr, old_size * sizeof(T));
        delete[] *ptr;
    }
    *ptr = retval;
    return retval;
}
Цитата Сообщение от Tulosba Посмотреть сообщение
5. Вместо allocate больше похоже на reallocate.
однако работает и как выделение памяти с нуля в том числе, allocate больше подходит, оно более общее
 
Текущее время: 09:52. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru