Я использую 3 участник SDK для получения информации самописца (http://pdn.pelco.com/content/creating-pelco-system)Удаления указателя на объект вызывает Разбейте
Вот небольшой пример создания объекта системы и использовать его для получения информации о камере.
#include "stdafx.h"
#include "windowsx.h"
#include "objbase.h"
#include "PelcoSDK/PelcoSDK.h"
#include "PelcoSDK/SystemCollection.h"
int _tmain(int argc, _TCHAR* argv[])
{
HRESULT hr = ::CoInitializeEx(NULL, COINIT_MULTITHREADED);
if (SUCCEEDED(hr))
{
PelcoSDK::Startup();
PelcoSDK::System system("admin:[email protected]://192.168.10.123:60001?alias=MyPelco");
PelcoSDK::DeviceCollection deviceCollection = pSystem.GetDeviceCollection();
for (deviceCollection.Reset(); deviceCollection.MoveNext();)
{
PelcoSDK::Device device(deviceCollection.Current());
printf("\tDevice Name: %s\n", device.GetModelName());
}
return 0;
}
}
выше работает отлично, но теперь я хочу, чтобы создать класс-оболочку вокруг этого поведения, поэтому я хочу указатель на переменную-член PelcoSDK :: System, как так:
#include "stdafx.h"
#include "windowsx.h"
#include "objbase.h"
#include "PelcoSDK/PelcoSDK.h"
#include "PelcoSDK/SystemCollection.h"
int _tmain(int argc, _TCHAR* argv[])
{
HRESULT hr = ::CoInitializeEx(NULL, COINIT_MULTITHREADED);
if (SUCCEEDED(hr))
{
PelcoSDK::Startup();
PelcoSDK::System* pSystem = new PelcoSDK::System("admin:[email protected]://192.168.10.123:60001?alias=MyPelco");
PelcoSDK::DeviceCollection deviceCollection = pSystem->GetDeviceCollection();
for (deviceCollection.Reset(); deviceCollection.MoveNext();)
{
PelcoSDK::Device device(deviceCollection.Current());
printf("\tDevice Name: %s\n", device.GetModelName());
}
delete pSystem; <-- Crashes here
pSystem = nullptr;
return 0;
}
}
Это прекрасно работает, но когда я иду, чтобы удалить указатель, то он бросает отладки asertion каждый раз:
Я не могу использовать указатель на этот объект ??
* Где * это катастрофа произойдет? Попробуйте запустить программу в отладчике, отладчик остановится в месте сбоя, позволяя вам изучить значения задействованных переменных, а также изучить (и подойти) стек вызовов функций. Поднимите стек вызовов, пока не получите код. Что касается * почему * он падает, может быть много причин, в том числе (но не ограничиваясь этим), вы изменяете указатель, вы пишете за пределами где-то и многое другое. Кроме того, попробуйте создать [Минимальный, полный и проверенный пример] (http://stackoverflow.com/help/mcve) и показать нам. –
@JoachimPileborg он падает точно при удалении указателя, как говорится в моем сообщении. –
В приведенных выше двух примерах верхняя часть работает, но нижняя часть падает, когда я удаляю указатель. –