Apostolos\’ Daily Plate

Don’t use malloc with C++

Posted in Πληροφορική by asyropoulos on Δεκέμβριος 8, 2012

OK this may not be news for experienced C++ programmers, but as a word of advice never use malloc in C++ programs. In particular, if one wants to implement dynamic data structures using pointers, she should use new instead of malloc. For example, consider the following declarations:

typedef struct {
  string env_name;
  int lineno;
} env_data;

struct node {
  env_data data;
  struct node *link;
};

typedef struct {
  struct node *head;
  struct node *list_node;
} Stack;

Then the following is not the way to allocate memory for a node

stack->list_node = (node *) malloc(sizeof(node));

The proper way to do this is simply:

stack->list_node = new node;

As an exercise I wrote a simple program that utilized a stack and initally I used malloc to create nodes, but the program crashed most of the times. When I replaced malloc with new, the program stopped crashing and gave the expected results. So don’t use malloc in C++, it’s for C programmers only.

Advertisements

Σχολιάστε

Εισάγετε τα παρακάτω στοιχεία ή επιλέξτε ένα εικονίδιο για να συνδεθείτε:

Λογότυπο WordPress.com

Σχολιάζετε χρησιμοποιώντας τον λογαριασμό WordPress.com. Αποσύνδεση / Αλλαγή )

Φωτογραφία Twitter

Σχολιάζετε χρησιμοποιώντας τον λογαριασμό Twitter. Αποσύνδεση / Αλλαγή )

Φωτογραφία Facebook

Σχολιάζετε χρησιμοποιώντας τον λογαριασμό Facebook. Αποσύνδεση / Αλλαγή )

Φωτογραφία Google+

Σχολιάζετε χρησιμοποιώντας τον λογαριασμό Google+. Αποσύνδεση / Αλλαγή )

Σύνδεση με %s

Αρέσει σε %d bloggers: