Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
Winhttp
60 / 60 / 0
Регистрация: 05.01.2013
Сообщений: 235
#1

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

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

не работает пример из лекции , там пример на доске такой написан -
C++
1
2
3
4
5
6
#include <stdlib.h>
int main()
{
    int *p=malloc(10000*sizeof(int));//выделили память
    free(p);//освободили
}
но такой пример отказывается компилироваться с ошибкой
Код
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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.02.2013, 02:33
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Выделение памяти malloc (C++):

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

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

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

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

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

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

5
rangerx
1935 / 1544 / 141
Регистрация: 31.05.2009
Сообщений: 2,913
08.02.2013, 02:43 #2
Цитата Сообщение от 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
Winhttp
60 / 60 / 0
Регистрация: 05.01.2013
Сообщений: 235
08.02.2013, 04:10  [ТС] #3
а чем отличается
C++
1
 static_cast<int*>
от того же
C++
1
(int *)
?
0
Dekio
Фрилансер
Эксперт С++
5837 / 1218 / 214
Регистрация: 23.11.2010
Сообщений: 3,378
Записей в блоге: 1
08.02.2013, 10:21 #4
Разница в том, что язык С не знает разницы между cast'aми (const_cast, reinterpret_cast и т.д.), которые по разному работают и нужны для разных целей. Причина использования static_cast в том, что он безопасен и использует указанные правила приведения типов.
1
-=ЮрА=-
Заблокирован
Автор FAQ
08.02.2013, 11:22 #5
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
Ушел
Эксперт CЭксперт С++
13553 / 7704 / 872
Регистрация: 27.09.2012
Сообщений: 19,006
Записей в блоге: 3
Завершенные тесты: 1
08.02.2013, 11:31 #6
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
жуёт Си код и без операций приведения типа
в Си это вполне нормально.
Неявное преобразование от void* запрещено в плюсах
1
08.02.2013, 11:31
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.02.2013, 11:31
Привет! Вот еще темы с ответами:

Выход за пределы выделенной памяти (new, malloc) - C++
День был пасмурный... Чашка чая помогала не заснуть перед монитором... На экране высвечивались два файла с разными расширениями: .c и...

Ошибка при выделении памяти с помощью malloc - C++
Помогите выдает ошибку в рядочке :&quot;Ar = ( far *)malloc(size*sizeof(int));&quot; полный текст програмы: #include &quot;stdafx.h&quot; using namespace...

Утечка памяти (решение СЛАУ методом Крамера, матрицы, malloc) - C++
Раньше программировал на C#/Java (а как следствие и расхлябанность по отношению к памяти), сейчас пытаюсь осилить C++. Более-менее понял...

При выделении памяти через malloc, как создавать объекты ? - C++
Выделяю память через malloc под 4 объекта, как их создать ? myClass * ptr = (myClass*) malloc(sizeof(myClass)*4); for(int i = 0;...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru