ОБНОВЛЕНИЕ (решено): Хорошо, я полный идиот !Оказывается, в моей основной программе в разделе «делать вещи с данными» я увеличил указатель, поэтому удаление, очевидно, не сработало!D'oh!
Итак, я компилирую разделяемую библиотеку, которая имеет функцию, аналогичную этой (супер упрощенное представление), и эта библиотека также моя - поэтому я знаю, как распределяются данные:
// inside library
void* getData(int size) { // with other parameters
UINT8* data = new UINT8[size]; // where typedef uint8_t UINT8; for gcc
// do a socket read, where data is the buffer
blockingRead (someSocket, data, propertySize);
return (void*) data;
}
Он должен возвращать пустой указатель, так как данные могут быть структурой (так что можно просто привести к структуре).
Проблема в том, что я использую этот указатель в моей основной программе,и я хочу удалить его, когда я закончу.Если я сделаю это в своей основной программе:
// inside main program
char* data = (char*) Library::getData(5);
// do stuff with data
delete[] data; // crashes with:
// *** glibc detected *** core: free(): invalid pointer: 0x00002aaab007bca4 ***
Я подумал, может быть, мне следует вместо этого удалить ее из общей библиотеки:
// inside library
void disposeData(void* data) { // call this from main program
delete[] (UINT8*) data; // cast it back to the original type of pointer
}
Но я все равно получаю тот же сбой!Все работает хорошо и прекрасно, если я не удаляю, но я не хочу ненужных утечек памяти во всей моей программе.
Я, вероятно, делаю что-то глупое - пожалуйста, помогите мне найти ошибку в моих способах!
РЕДАКТИРОВАТЬ: Как указано в комментариях, кажется, что приведенный выше код работает - мне нужно будет посмотреть, что конкретно вызывает ошибки в моем коде.