|
Ralph Hempel wrote:
kathrin_69@gmx.de wrote:Hi,I'm trying to replace the Lua default l_alloc function with my own one. My aim is to have all memory Lua allocates inside a single array of pre-allocated memory.<snip>void* alloc_impl_manual( void* ptr, size_t osize, size_t nsize ) { if (nsize) {std::vector<unsigned char>* mem = new std::vector<unsigned char>(nsize);//yes, it will leak. don't care for nowreturn &(*mem)[0]; //returned memory position should be aligned by new} return NULL; }Ummm, besides the leak, should you not be returning: return( mem ) since mem is already a pointer to the memory you allocated?
mem is a pointer to a "header", usually something like this: class vector<T> { T *storage; size_t size; // Amount actually used size_t allocated; // number of elements in storage, >= size. }So, if you return mem, you're returning the address of that "header", not the array you've allocated.
And this expression &(*mem)[0] is very strange. I parse that as: (the adress of ( (the contents of mem) ???? ) my compiler warns that the subscripted value is neither an array nor a pointer...
vector overloads [] so that (*mem)[0] equals storage[0], which is exactly what you want the address of.
Best, Martin