c++ - error: Cannot access memory at address -
i'm trying return pointer function in derived class, code:
class a
class { protected: c c; public: virtual void func(){ unsigned char *data; int size=getdata(data); } }
class b
class b : public { private: int size; public: b(const c &_c) { c=_c; }; const int b::getdata(unsigned char *data) const { data=(unsigned char *)malloc(size); memcpy(data,c.getmem(),size); if(!data){ //err } return size; }
class c
class c { private: unsigned char *mem; public: c(unsigned char *_mem) : mem(_mem); const unsigned char *getmem() const { return mem; }; }
main.cpp
c c(...); b *b=new b(c); b->func();
the error when getdata returns
(this=0x50cdf8, data=0x2 <error: cannot access memory @ address 0x2>, size=32)
thanks.
in class a
, func()
worthless because:
1. size
not returned caller.
2. pointer data
local func
, it's contents disappear after end of execution in func()
.
you don't need return const int
function. function return copy of variables, constant (copies).
don't use malloc
in c++, use operator new
. malloc
function not call constructors objects.
don't use new
or malloc
unless absolutely necessary. usually, dynamic memory containers capacity not known @ compile time; or objects live beyond function or statement block's execution time. if must use dynamic memory, use smart pointer (like boost::shared_ptr
).
use std::vector
dynamic arrays. works; it's been tested; don't have write own, including memory management.
you passing data
value (a copy of pointer). if want modify pointer, pass reference or pass pointer pointer; (what call address of pointer).
example:
void my_function(uint8_t * & p_data) { p_data = new uint8_t[512]; }
or
void another_function(unsigned char * * pp_data) { *pp_data = new unsigned char [1024]; }
a better solution:
void better_function(std::vector<uint8_t>& data) { data.reserve(64); (uint8_t = 0; < 64; ++i) { data[i] = i; } }
Comments
Post a Comment