Не полное выделение памяти с++ malloc

132
01 декабря 2020, 19:40

От чего у меня выделяется память только для одного элемента?

...
        double * dd = (double*)malloc(size*sizeof (double));
        std::cout << "multiple void dd " << sizeof (dd)/sizeof (double) << " size "<< size <<std::endl;
...
run
multiple void dd 1 size 2625

Вторая реализация с исправлением:

...
    double * dd = new double (size);
    free(dd);
    double dd1 = *dd;;
    std::cout << "multiple void dd1 " << sizeof (dd1)/sizeof (double) << " size "<< size <<std::endl;
...
run
multiple void dd1 1 size 2625
Answer 1

У вас выделяется память для size элементов, которое, судя по выводу, у вас равно 2625.

Если же вас интересует, почему

sizeof (dd)/sizeof (double)

дает 1 - так это потому, что размер указателя (dd) в 64-разрадной программе равен 8 и совпадает с размером double. Была бы 32-разрядная программа - было бы значение 0...

READ ALSO
Как убрать пробел после последней цифры, при построении числовой пирамиды?

Как убрать пробел после последней цифры, при построении числовой пирамиды?

Написал код для создания числовой пирамиды на N строк, где в каждой строке нумерация идет от 1 до N строки через пробелВсе компилируется и работает,...

114
Запрет на закрытие программы

Запрет на закрытие программы

Нужно запретить пользователю выходить из программы "крестиком"

129
Visual Studio C++ не подсвечивает ошибки

Visual Studio C++ не подсвечивает ошибки

Я не знаю баг это или фича, но Visual Studio C++ (VS 141) не подсвечивает ошибки если функция использует шаблонные параметры, да и вообще работает с шаблонном

144
Мультиплатформенный запуск executable файла из C++

Мультиплатформенный запуск executable файла из C++

Предположим, есть программа, которая должна в зависимости от системы Linux/Windows запускать исполняемый файлЕсть ли в стандартной библиотеке...

115