Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/30: Рейтинг темы: голосов - 30, средняя оценка - 4.77
62 / 62 / 5
Регистрация: 05.01.2013
Сообщений: 235

Выделение памяти malloc

08.02.2013, 02:33. Показов 6191. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
не работает пример из лекции , там пример на доске такой написан -
C++
1
2
3
4
5
6
#include <stdlib.h>
int main()
{
    int *p=malloc(10000*sizeof(int));//выделили память
    free(p);//освободили
}
но такой пример отказывается компилироваться с ошибкой
Code
1
error: invalid conversion from 'void*' to 'int*' [-fpermissive]|
тоесть, указатель должен быть void*? и как с ним работать тогда?
вот такая запись скомпилируется нормально:
C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
#include <windows.h>
#include <stdlib.h>
 
 
int main()
{
    void *p=malloc(40000*sizeof(int));//выделили память
    free(p);//освободили
}
но если первой ячейке , ну или элементу присвоить какое то значение, то программа не скомпилируется
C++
1
p[0]=1
еще вопрос по поводу void - из других ЯП я знаю, что это ключевое слово, которое означает, что функция ничего не возвращает, поэтому не могу понять, причем тут void в начале функции, если она возвращает указатель? это тип указателя, как я понял?
в гугле нашел следующее
void* - обобщенный тип указателя, т.е. не привязанный к какому-либо конкретному типу
, ну и как с ним работать?

вот сама лекция на том месте с примером -

Добавлено через 7 минут
и не подскажете, что значат значения функции в начале -
C++
1
_CRTIMP void* __cdecl __MINGW_NOTHROW   malloc  (size_t) __MINGW_ATTRIB_MALLOC;
ну - _CRTIMP, __cdecl __MINGW_NOTHROW, и в конце - __MINGW_ATTRIB_MALLOC
запутанно чтото все, и смысла уловить не могу во всем этом.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.02.2013, 02:33
Ответы с готовыми решениями:

Выделение памяти malloc
Подскажите как мне выделить два массива через malloc, пробою вот так #include &lt;iostream&gt; #include &lt;stdio.h&gt; #include...

Выделение памяти с использованием malloc
Доброго времени суток :) В общем есть следующий класс: class Addres { char name; char street; char city; char state; ...

Динамическое выделение памяти malloc()
Здравствуйте! Cкажите пожалуйста, как узнать каков максимальный объем памяти, который может выделить программа посредством функции...

5
2022 / 1621 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
08.02.2013, 02:43
Цитата Сообщение от Winhttp Посмотреть сообщение
#include <stdlib.h>
int main()
{
* * int *p=malloc(10000*sizeof(int));//выделили память
* * free(p);//освободили
}
Очевидно, этот пример изначально был написан на C а не на C++. В C++ void* к целевому типу необходимо приводить явно
C++
1
int *p = static_cast<int*>(malloc(10000 * sizeof(int)));
1
62 / 62 / 5
Регистрация: 05.01.2013
Сообщений: 235
08.02.2013, 04:10  [ТС]
а чем отличается
C++
1
 static_cast<int*>
от того же
C++
1
(int *)
?
0
Фрилансер
Эксперт С++
 Аватар для Dekio
5845 / 1226 / 499
Регистрация: 23.11.2010
Сообщений: 3,373
Записей в блоге: 1
08.02.2013, 10:21
Разница в том, что язык С не знает разницы между cast'aми (const_cast, reinterpret_cast и т.д.), которые по разному работают и нужны для разных целей. Причина использования static_cast в том, что он безопасен и использует указанные правила приведения типов.
1
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
08.02.2013, 11:22
Winhttp, на лекциях вам дали выделение памяти в Си. static_cast для плюсов, (type *) для Си вот и всё. В Си другой механизм обработки ошибок и ряд прочих тонкостей, потому если написать вот так
#include <stdlib.h>
int main()
{
* * int *p= static_cast<int*>malloc(10000*sizeof(int));//выделили память
* * free(p);//освободили
return 0;
}
- это будет ошибкой для Си (в нём попросту нет cast)
http://codepad.org/5rjXLo7Y
error: 'static_cast' undeclared (first use in this function)
А вот с (int *) всё будет компилироваться норм
http://codepad.org/LEEy0hyf
Output:
No errors or program output.
Хотя, хотя codepad - овский Си компилятор жуёт Си код и без операций приведения типа http://codepad.org/01AMLwLL
1
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
08.02.2013, 11:31
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
жуёт Си код и без операций приведения типа
в Си это вполне нормально.
Неявное преобразование от void* запрещено в плюсах
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.02.2013, 11:31
Помогаю со студенческими работами здесь

Выделение памяти malloc realloc
мне задачу поставили, надо не используя stl, загрузить из файла данные. r - строки с - это столбцы выдается сообщение ...

Динамическое выделение памяти под структуру (malloc)
Нашел данное решение на этом форуме, но никак не могу понять как оно работает. Вот даны структуры: struct info // структура...

Выделение памяти malloc приводит к неправильным расчетам
Есть функция которая постоянно вызывается для расчетов. Она работает правильно, до тех пор пока я в неё не добовляю очередную строчку...

Выделение памяти через malloc и считывание данных
Здравствуйте. Имеется файл, в котором 6 чисел типа double. В программе имеется 2 массива. В 1-ый записываю все числа из файла, стоящие на...

Освобождение памяти malloc free
В общем работаю над расширением для php (для тренировки в php и в c++ сразу) Суть дела вот в чем, наткнулся на конвертер php массива в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru