Having trouble implementing my own reserve function. ( have to do it for an assignment)

Here is what i have so far but it doesn't appear to work.

.h prototype

void reserve(size_type n);

constructor for our string

mystring::mystring(const char * s) {
len = strlen(s);
buf_size = len + 1;
ptr_buffer = new char[buf_size];
strcpy(ptr_buffer, s);


reserve function:

void mystring::reserve(size_type n){
     if(n > buf_size){
       char *hold = ptr_buffer;
       delete ptr_buffer;
       ptr_buffer = new char[n+1];
       ptr_buffer = hold;
       delete hold;
       buf_size = n+1;

n is size_type unsigned int

The .h was supplied and we cannot change it.

6 Years
Discussion Span
Last Post by Unimportant

I'm not really sure what you think the code you have means, but to me it is a little bit silly.

void mystring::reserve(size_t n) {
  if(!n>buf_size) return;
  char *swap = new char[n]; // also it's better to use powers of 2 to prevent overhead
  memcpy(swap,ptr_buffer,buf_size); // copy the old data
  buf_size = n; // this is the new maximum occupancy of the array
  delete[] ptr_buffer; // delete the old array, as it will soon just be random memory
  ptr_buffer = swap; // change your char* to the address swap points to
  // which is the array we just allocated and copied the old contents into

You really need to read up on pointers and dynamic memory.
Good luck!

This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.