Я пытаюсь создать экземпляр объекта из статической функции-члена. Я определил:C++ Создание класса из статической функции
class A
{
public:
A();
A(int aParam);
~A();
static A* Creator();
private:
int m_nData;
};
И Реализовано:
#include "A.h"
A::A()
{
}
A::A(int aParam)
{
m_nData = aParam;
}
A::~A()
{
}
A* A::Creator()
{
return new A(0);
}
Он работает нормально, но есть проблемы при удалении объекта:
#include "A.h"
#include <stdio.h>
int main(int argc, char** argv)
{
A* pointer = A::Creator();
delete pointer;
return 0;
}
Этот пример работает, как ожидалось. Я боюсь, что проблема может быть более сложной. Я попытаюсь дать более подробную информацию: У меня есть класс, похожий на описанный здесь в библиотеке dll (Windows). Когда я вызываю статическую функцию из своей программы, я получаю сообщение об ошибке (при отладке): HEAP [program.exe]: неверный адрес, указанный для RtlValidateHeap (0000000000BA0000, 000000000264B3D0) Windows вызвала точку останова в program.exe.
Это может быть связано с повреждением кучи, что указывает на ошибку в файле program.exe или в любой из загруженных DLL-файлов.
Как я уже протестировал, кажется, что вновь созданный объект выделяется в стеке.
Любая помощь будет оценена по достоинству.
это даже не компилируется, отправьте компилируемое решение. –
Единственное, что неправильно с кодом, который вы опубликовали, - это отсутствие определения деструктора и пары синтаксических ошибок. Это приведет к ошибке компоновщика, за исключением самых экстремальных ситуаций. То, что вы не показали, является виновником вашего краха. –
Я ожидаю, что что-то еще не так. Объект определенно выделен в куче, и минимальный пример, который вы показали, должен работать нормально. Неужели этот точный пример так или иначе провалился или вы пропустили важную деталь, чтобы упростить его для публикации? –