アクセス違反の場所0xCDCDCDD1エラーが表示されています。私はvc9コンパイラを使用しています。new_srdProg_d.exeの0x0040224dで処理されない例外:0xC0000005:アクセス違反の読み取り場所0xcdcdcdd1
マイコード:
#define SRD_EXPORTS
#include "SRD.h"
#include "ISRDPresenter.h"
#include "ISRDFactory.h"
#include "ISRDevice.h"
#include "AString.h"
int main(int argc, char** argv)
{
ISRDPresenter* dev = (ISRDPresenter*)malloc(sizeof(ISRDPresenter)); // = NewSRDPresenter();
char act[ 128 ];
int commands = argc-1;
do
{
if(!commands)
{
act[ 0 ] = 0;
printf("SRD> ");
#if defined(__IBMC__) || defined (__IBMCPP__)
fflush(stdout);
#endif
fgets(act, 128, stdin);
}
else
{
strncpy(act, argv[ argc - commands-- ], 128);
printf("SRD> %s\n", act);
}
if(!strncmp(act, "help", 4))
{
dev->showHelp(act);
}
...
}
エラーがラインDEV->のShowHelp(ACT)です。 問題はライン
ISRDPresenter* dev = (ISRDPresenter*)malloc(sizeof(ISRDPresenter));
にする必要があります。しかし、私はそれを修正can't。 私が代わりに使用している場合:
ISRDPresenter* dev = NewSRDPresenter();
それは私が使用している場合、識別子が見つかった、とすることができないと言う。
ISRDPresenter* dev = new ISRDPresenter();
はISRDPresenterは抽象クラスをインスタンス化することはできませんと言う...
ISRDPresenter.h:
#ifndef __ISRDPRESENTER_H
#define __ISRDPRESENTER_H
#define SRD_EXPORTS
#include "SRD.h"
#include "ISRDDataTypes.h"
#include "AIPClass.h"
class ISRDFactory;
class ISRDPresenter
{
public:
// -----------------------------------------------------------------------
// Destructor
// -----------------------------------------------------------------------
virtual ~ISRDPresenter() {};
// -----------------------------------------------------------------------
// Function prototypes
// -----------------------------------------------------------------------
virtual void showHelp(char* attr) const = 0;
virtual void showList(void) const = 0;
virtual void showInfo(size_t i) const = 0;
virtual void showFirmware(size_t i) const = 0;
};
#endif /* __ISRDPRESENTER_H */
SRDPresenter.h:
#ifndef __SRDPRESENTER_H
#define __SRDPRESENTER_H
#define SRD_EXPORTS
#include "SRD.h"
#include "ISRDPresenter.h"
#include "AString.h"
#include "ISRDFactory.h"
//-----------------------------------------------------------------------------
// ASRDPresenter
//-----------------------------------------------------------------------------
class ASRDPresenter : public ISRDPresenter
{
public:
//-------------------------------------------------------------------------
// ASRDPresenter constructor & destructor
//-------------------------------------------------------------------------
ASRDPresenter();
virtual ~ASRDPresenter(){};
//-------------------------------------------------------------------------
// Function prototypes
//-------------------------------------------------------------------------
void showHelp(char* attr ) const;
void showList(void) const;
void showInfo(size_t i) const;
void showFirmware(size_t i) const;
private:
ISRDFactory* f_srds;
};
SRD_EXPORT_PREF ISRDPresenter* SRD_EXPORT_POST NewSRDPresenter()
{
return new ASRDPresenter();
}
#endif /* __SRDPRESENTER_H */
SRDPresenter.cpp:
#define SRD_EXPORTS
#include "SRDPresenter.h"
#if defined(_MSC_VER)
#define WIN32_LEAN_AND_MEAN
#endif
// ---------------------------------------------------------------------------
// ASRDPresenter
// ---------------------------------------------------------------------------
ASRDPresenter::ASRDPresenter()
:f_srds()
{
// empty
}
void ASRDPresenter::showHelp(char* attr) const
{
if(!strcmp(attr, "help"))
{
printf("\nHelp to the ANOVIS SRD command.\n\n");
printf(" help : Print this help.\n");
printf(" list : List all ANOVIS SRD found.\n");
printf(" info
}
...
}
私はそれをどのように修正することができますか?光! あらかじめ高尚!
理由のmalloc C++内の? – user1810087
なぜISRDPresenterをインスタンス化しようとしていますか?抽象クラスです! –
タグをスパムしないでください。 CはC++ではありません! – Olaf