Operator new for Arduino

arduino, arduino-ide, c++, new-operator

Solution

`new` and `delete` is defined as part of the Arduino distribution: `/usr/share/arduino/hardware/arduino/cores/arduino/new.h`:

/* Header to define new/delete operators as they aren't provided by avr-gcc by default
   Taken from http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=59453 
 */
#ifndef NEW_H
#define NEW_H

#include <stdlib.h>

void * operator new(size_t size);
void operator delete(void * ptr); 

__extension__ typedef int __guard __attribute__((mode (__DI__)));

extern "C" int __cxa_guard_acquire(__guard *);
extern "C" void __cxa_guard_release (__guard *);
extern "C" void __cxa_guard_abort (__guard *); 

extern "C" void __cxa_pure_virtual(void);

#endif

The `new.h` is included in `Printable.h` so you are getting it in your Arduino basic includes. These operators are not defined in AVR Libc though. My interpretation of these design choices: the Libc people thought it was a bad idea, whereas Arduino people are all about ease of use: if you want `new` and `delete`, please have them.

Problem

I've been told (specifically in an answer to C++ Standard Library on Arduino, and in Stack Overflow question C++ string and Arduino String. How to combine them?)) that the Arduino compiler does not implement the `new` operator. However, I've written a program for the Arduino (in the Arduino IDE) which uses it, and it works perfectly. ``` void setup() { Serial.begin(9600); } void loop() { char* array; char c; unsigned arraySize; Serial.write("Enter a 1 digit number.\n"); do { c = Serial.read(); } while(c < '0' or c > '9'); arraySize = c-'0'; Serial.write("You wrote "); Serial.write(c); Serial.write(".\n"); Serial.write("Now enter "); Serial.write(c); Serial.write(" lower-case letters.\n"); array = new char[arraySize]; for (unsigned i = 0; i < arraySize;) { array[i] = Serial.read(); if (array[i] >= 'a' and array[i] <= 'z') i++; } Serial.write("You entered: "); for (unsigned i = 0; i < arraySize; i++) { Serial.write(array[i]); Serial.write(" "); } Serial.write("\n"); } ``` Here is a sample output to demonstrate its functionality: ``` Enter a 1 digit number. You wrote 5. Now enter 5 lower-case letters. You entered: h e l l o Enter a 1 digit number. You wrote 9. Now enter 9 lower-case letters. You entered: w a s s u p m a n Enter a 1 digit number. You wrote 9. Now enter 9 lower-case letters. You entered: h o w y a d o i n Enter a 1 digit number. You wrote 4. Now enter 4 lower-case letters. You entered: c o o l Enter a 1 digit number. You wrote 7. Now enter 7 lower-case letters. You entered: i t w o r k s Enter a 1 digit number. ``` So why do I keep hearing this? Are these people wrong, or do I simply misunderstand their meaning?

Original source

Related problems