How is your p_data defined?
The way the list is defined in your example, you are using the default clean up operation (which pretty much maps to adl_memFree()) to clean up when the list item is deleted.
If your p_data is a structure with pointers in it, then you will have to write your own clean up function to release the pointer memory before releasing the list element memory.
Also, make sure you aren’t adding automatic (i.e. local) variable to the list, as these will have gone out of scope once the function has returned and you will get an ARM exception when you try to delete them from the list.
static wm_lst_t database;
database = wm_lstCreate (WM_LIST_NONE, NULL);
// this is wrong, and will cause an exception when you try to access/delete the list item
index = wm_lstAddItem(database, &value);
// this works, as memory is allocated off the heap and remains accessable everywhere in your app
p_value = adl_memGet(sizeof(s32));
index = wm_lstAddItem(database, p_value);
Hope this helps.