Allocating memory is not enough.
You must also call the constructor.
The most common and recommended way of simple dynamic allocation in C++ is
scopeList_T* t1 = new scopeList_T;
is allocates memory and then calls constuctor.
After you're done with the stucture you have to delete the object like this
delete t1;
ADD:
If you really need to use other memory allocator (like malloc/free or something of your own design) then you have to allocate memory and call the placement new (it is like calling the constuctor explicitly). When you're done with the object you have to call the destructor explicitly and then deallocate memory. Important thing: memory allocated for the object must meet the alignment requirements for this object type.
Example:
// allocating memory
void* p = my_alloc( sizeof(scopeList_T) );
if( p == NULL )
{
// report allocation error and throw or return
}
// placement new operator
scopeList_T* t1 = new(p) scopeList_T; // t1 == p
// do some thing with the object
// .............................
// call destructor explicitly
t1->~scopeList_T();
// free memory
my_free(p); // or free(t1); that is the same