0

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.

2
Contributors
1
Reply
2
Views
7 Years
Discussion Span
Last Post by Unimportant
0

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.