answersLogoWhite

0


Best Answer

The new operator returns a pointer to the memory allocated to an object, or returns NULL if the memory cannot be allocated. This isn't an error as such, it simply means there isn't a large enough block of free memory available to meet the allocation. There may well be more than enough unused memory available, but the memory must be allocated as a single, contiguous block. Modern operating systems use hard-disk space to provide more memory than physically exists in the system (virtual memory), however with a 32-bit system there is an upper limit of 4GB (which includes video memory), of which only 2GB is available to applications. Thus if the user has a lot of programs consuming a lot of memory then it may not be possible to free up enough physical RAM to meet an allocation. Hence the need to check if a returned pointer is non-NULL before attempting to access the memory it points to. On a 64-bit system this is less of a problem because there's effectively unlimited memory (the only limit being free hard-drive space), but even then you must still check a pointer is non-NULL before indirectly accessing the memory it points to.

User Avatar

Wiki User

10y ago
This answer is:
User Avatar

Add your answer:

Earn +20 pts
Q: Why do you get memory access errors with new operator?
Write your answer...
Submit
Still have questions?
magnify glass
imp
Related questions

What is the memory management operator in c plus plus?

There is no memory management operator in C++ -- it is an unmanaged language. You use the C++ new operator to allocate memory, and use the C++ delete operator to release previously allocated memory.


Difference between new operator and operator new?

new operator allows to allocate a memory from the heap..... so a new instance of a class is created.......... but operator new is used to overload the (new) operator........ juast like overloading of other operators


Why use new and delete operator overloading in c plus plus?

one reason to use new and delete operator overloading in c++ is when you are using your own memory manager code. when the user of your code calls the new keywork, your memory manager code can allocate memory.


How the new operator works in java?

1. It is the only way to create object. 2. New is a keyword. 3. New operator allocates memory for an object. 4. It is a bit faster and clever way of creating objects or instances.


What is the use of new operator?

A new operater is used to allocating a memory space for a particular object.


Can memory which has been allocated by new be freed by free?

No, you have to use the operator delete to objects created by new.


What are the advantages of the new operator?

The new operator in programming is used to allocate memory for a new object or instance of a class. It helps in dynamic memory allocation and object creation at runtime, allowing for flexible memory management and object instantiation in languages like Java and C++.


Why are you used new operator in main method in java?

new is used for memory allocation in java which on later automatically deallocated by garbage collector.


Explain the purpose of new and delete operator?

The new operator instantiates a named object of a given type while the delete operator destroys an object. The new operator invokes the object's default constructor unless directed to invoke a specific constructor. The delete operator always invokes the object's destructor.


What is the difference between malloc and new other than syntax?

Click on the link to your right for the answer.Answerboth malloc and new functions are used for dynamic memory allocations and the basic difference is: malloc requires a special "typecasting" when it allocates memory for eg. if the pointer used is the char pointer then after the processor allocates memory then this allocated memory needs to be typecasted to char pointer i.e (char*).but new does not requires any typecasting. Also, free is the keyword used to free the memory while using malloc and delete the keyword to free memory while using new, otherwise this will lead the memory leak. AnswerBesides the basic syntactical difference: malloc is a C function which will allocate the amount of memory you ask and that's it. new is a C++ operator which will allocate memory AND call the constructor of the class for which's object memory is being allocated. Similarily, free is a C function which will free up the memory allocated. but delete is a C++ operator which will free up the allocated memory AND call the destructor of the object.Answermalloc in a function and new is an operator, and its a good programming practice to use an operator instead of functions, because function itself requires some time to be executed whenever that particular function is called. so the main difference is that we use operators instead of malloc because of the TIME CONSTRAINT. Answer1.malloc requires the type casting during decleration , where as new doesn't needed the type casting during decleration 2. when ever we use new for allocating memory along with this it calls the constructor of the class for which object memory is allocated 3. in case of malloc free is the word used to clear the memory, where as delete is the format used in case of new to free the memory after usage 4. malloc is function, where as new is operator..so the time required for execution is less in case of new (it being a operator) as compared to malloc(it being a function) Answer1. malloc is a function call, while new is an operator. This difference is syntactic; behind the scenes, they both perform pretty much the same work to allocate the memory, and operator new also invokes any required constructors. There is a commonplace urban myth that operators are somehow faster in your code than functions; this is not correct, as any operator (except for mathematical operations that correspond directly to a single machine-code instruction) invocation amounts to a function call in any case. 2. malloc can fail, and returns a NULL pointer if memory is exhausted. Operator new never returns a NULL pointer, but indicates failure by throwing an exception instead. There is also a nothrow() version of operator new, which does return NULL on failure.


How does C Plus Plus handle dynamic memory allocation?

To allocate memory in C++ you use the new operator. To release the memory, you use the delete operator.double *myArray = new float [1000];//check and usedelete [] myArray;myClass *myClassInstance = new myClass;//check and usedelete myClassInstance;


What operator is used to create and make new object in oop?

By default, operator new() allocates memory on the free store (the heap). The standard defines four global operators:The global operator new() has three standard implementations defined in :void* operator new (std::size_t size);void* operator new (std::size_t size, const std::nothrow_t& nothrow_value) noexcept;void* operator new (std::size_t size, void* ptr) noexcept;The first implementation allocates size bytes on the free store and returns a generic pointer (void*) to the first byte of the allocation. If the allocation fails for any reason, a std::bad_alloc exception is thrown. This operator is therefore known as a throwing allocation.The second is the same as the first but does not throw an exception. If the allocation fails for any reason, nullptr is returned instead. this is known as a nothrow allocation.The third version is used when (raw) memory has already been allocated and simply returns the given ptr argument. The memory referred to by ptr need not be allocated on the heap. This version is known as placement.In all three cases, the allocated memory is simply raw, uninitialised memory (similar to what we would expect when invoking the standard global malloc() function in C).In addition, the standard also defines global operator new[]() (also in ):void* operator new[] (std::size_t size);void* operator new[] (std::size_t size, const std::nothrow_t& nothrow_value) noexcept;void* operator new[] (std::size_t size, void* ptr) noexcept;These versions are used when we wish to allocate an array of objects and have similar behaviours to the "normal" global operators.Note that all these operators are defined implicitly; we do not need to explicitly include the header to use them.In order to physically construct an object via global operator new (), the object's class must define a static member operator new (). Given that it would be tedious to do this for every class that we define, this is done implicitly for us. Thus when we invoke the following:T* ptr = new T {args...};T* ptr = new T[N] {args...};we are actually invoking the following:T* ptr = T::operator new (args...);T* ptr = T::operator new[] (N, args...);The (implicit) static member operator new() and operator new[]() are implementation-defined, but will generally be defined as follows:T* T::operator new (args...) {T* ptr = ::new (sizeof (T)); // invoke the global operator (may throw)// initialise the memory from args...return ptr;}T* T::operator new[] (std::size_t N, args...) {T* ptr = ::new[] (N * sizeof (T)); // invoke the global operator (may throw)// initialise the memory for each N from args...return ptr;}Now we can see where the std::size_t argument passed to global operator new() actually comes from.Given that T::operator new() is a member function, it can be overloaded on a class-by-class basis if we wish to provide our own memory management facility. We can also overload the global operator new(), however this is not recommended because there's no way of knowing how other classes we have no control over might be affected, particularly those which provide their own member operator new() overloads and which expect the default behaviour of the global operator new(). Overloading global operator new() is not for the feint-hearted, thus it is recommended you use a tried-and-tested library for global memory management rather than attempting to write your own from scratch.