mayashah Ответов: 3

"Мэллок" это значит ?


Привет!!
я хочу задать небольшой вопрос, который я узнал об этом с какого-то сайта !! я не знаю, что это значит, и я хочу его альтернативу в виде " новой ", если таковая имеется (динамическая память)

"new_node = (структуры struct узел *)Танос(оператор sizeof(структура узла))" // вот и я сталкиваются с проблемами и скажите, пожалуйста, его заместителей !!

Что я уже пробовал:

struct node *new_node;
	char ch='y';
	do
	{
		new_node = (struct node *)malloc(sizeof(struct node));
		cout << "\n Enter the data:";
		cin>>new_node->data;
		new_node->next = NULL;

Manoj Kumar Choubey

malloc просто выделяет память строк и плату выделяет, но новый оператор вызывает конструктор и освобождает память,а после этого освобождает.

NotPolitcallyCorrect

Читайте документацию для вещей, которые вы не понимаете
http://www.cplusplus.com/reference/cstdlib/malloc/
http://www.cplusplus.com/reference/new/operator%20new/

Richard MacCutchan

Тогда, пожалуйста, расскажите нам точно, с какими проблемами вы сталкиваетесь.

Richard MacCutchan

Не правильный.

mayashah

на самом деле я не хочу использовать malloc !!
я хочу, чтобы я использовал "новый" вместо malloc, но я не знаю, как его использовать !!

Richard MacCutchan

Тогда вам следует ознакомиться с документацией: новый оператор (C++)[^].

3 Ответов

Рейтинг:
20

Jochen Arndt

Мэллок ... cppreference.com[^] (Edit: for Memory ALLOCation) - это функция из стандартной библиотеки C для выделения памяти из кучи.

Он все еще может быть использован с C++, но new вместо этого следует использовать (см. Также СТД::Танос - cppreference.com[^]) .

Одно отличие состоит в том, что malloc возвращает void* указатель, который должен быть приведен к типу слева с помощью C++:

struct node *new_node;

// OK with C, but fails to compile with C++:
new_node = malloc(sizeof(struct node));

// OK with C and C++:
new_node = (struct node *)malloc(sizeof(struct node));

// Recommended with C++:
new_node = reinterpret_cast<struct node *>(malloc(sizeof(struct node)));

Если сравнить это с C++ new
new_node = new node;
вы заметите следующее различие:
Также нет необходимости в sizeof() оператор, потому что компилятор знает тип и его размер.

Еще одно отличие заключается в том, что new - при вызове классов-вызывает конструктор и позволяет передавать аргументы конструктору.

Следует отметить, что всегда должна использоваться соответствующая функция высвобождения (free соответственно. delete).


Рейтинг:
2

OriginalGriff

malloc это библиотечная функция, которая является сокращением от "memory allocate" - и ее задача состоит в том, чтобы вернуть указатель на свободный блок памяти, размер которого вы указываете в параметре. Затем вы можете привести этот указатель к любому типу, для которого вам нужно его использовать, и использовать его как экземпляр этой структуры. Это позволяет создавать динамические экземпляры памяти во время выполнения, а не создавать их все во время компиляции.
Если вы используете malloc для выделения памяти необходимо использовать free чтобы освободить его, когда вы закончите с ним, или ваше приложение покажет "утечку памяти" и будет использовать все больше и больше памяти, чем дольше оно работает.

В зависимости от вашей системы, вы можете быть в состоянии использовать new и delete вместо.


Рейтинг:
1

Patrice T

Вам действительно нужно время, чтобы правильно выучить C/C++.

Вот ссылки на справочники книг по С и с++ авторов этих языков. Обратите внимание, что C является предком C++, поэтому знание C всегда полезно с C++.
Язык программирования Си - Википедия, свободная энциклопедия[^]
https://hassanolity.files.wordpress.com/2013/11/the_c_programming_language_2.pdf[^]
http://www.ime.usp.br/~ПФ/Керниган-Ритчи/с-Программирование-электронные книги.формат PDF[^]

Язык Программирования C++ [^]


mayashah

извините, не обижайтесь, но я здесь не для того, чтобы видеть такие наводящие на размышления ответы !!!

Patrice T

Без обид. Я разместил эти ссылки, потому что у вас уже есть 2 ответа.
Поскольку Мэллок изучается очень рано, я действительно думаю, что эта книга будет интересна для вас.
Вы можете предпочесть учебники.

mayashah

Спасибо, я очень ценю это !! я буду демонстративно касаться их !!