ショボ短歌会

ハンドルされていない例外はXXX.exe(YYY.DLL)にあります 0xC0000005:Access Violationというエラーが出ます。

エラーが出ている場所は
int nRet = oraDyna.Open(*ZZZ, Sql);
です。
ここを通過する時にエラーが発生します。
エラーの原因として何が考えられるでしょうか?
開発環境はWindows2000 VC++6.0です。
よろしくお願いします。

A 回答 (6件)

少々脇に外れるかも知れませんが、ANO.1 への補足に書かれた


>ODatabase *ZZZ;
>ZZZ = NULL;
>ZZZ = new OSession();
の "new OSession()" が謎です。

new演算子で ODatabaseクラスのオブジェクトを生成するのであれば
ODatabase *ZZZ;
ZZZ = new ODatabase;
と記述されると思うのですが。

この回答への補足

何度も回答ありがとう御座います。

>new演算子で ODatabaseクラスのオブジェクトを生成するのであれば
>ODatabase *ZZZ;
>ZZZ = new ODatabase;
>と記述されると思うのですが。
neko3839様のおっしゃる通りです。
ZZZ = new ODatabase();
と書いてありました><
こちらの記載ミスでした;;

補足日時:2006/06/06 14:46
    • good
    • 0
この回答へのお礼

新しいPCにて環境を作り直した(Oracleなどバージョンが違う)らうまく動くようになりました。
環境の違いの細かい所まではみれなかったですが、
プログラムには問題はなかったみたいです。
みなさまありがとうございました。

お礼日時:2006/06/19 11:42

>引数は2つだけです。

optionsが付いているので
>省略可能なのかなと思っていましたが違いますでしょうか?^^;
失礼しました。
>long options = ODYNASET_DEFAULT, OSnapshotID *snapID = NULL
があるので、
・options = ODYNASET_DEFAULT
・snapID = NULL
が入りますね。
    • good
    • 1

こちらでも少々試してみますが、その前に念のための確認です。


関数は
>oresult Open(const ODatabase &odb, const char *sql_statement,
long options = ODYNASET_DEFAULT, OSnapshotID *snapID = NULL);

ですが、この3番目と4番目の引数は、御質問の際の
>int nRet = oraDyna.Open(*ZZZ, Sql);
では記載漏れ、あるいは省略しただけで、実際のプログラムでは記述されていますね?

この回答への補足

回答ありがとう御座います。

>・・・では記載漏れ、あるいは省略しただけで、実際のプ>ログラムでは記述されていますね?
記載漏れでも省略でもありません。
引数は2つだけです。optionsが付いているので
省略可能なのかなと思っていましたが違いますでしょうか?^^;

補足日時:2006/06/06 11:46
    • good
    • 0

>oresult Open(const ODatabase &odb, const char *sql_statement,


oraDyna.Open() の第一引数は「参照型」ですよね。

>int nRet = oraDyna.Open(*ZZZ, Sql);
ここでは、「ポインタZZZが指している先頭の値」をポインタ値として渡す事を意図しているのですか?
oraDyna.Open()の引数の型と記述の仕方を再確認した方が良いと思います。
    • good
    • 0

int nRet = oraDyna.Open(*ZZZ, Sql);


で *ZZZと書くと、構造体そのものを渡しています。
通常は、構造体そのものを渡すことは、ありません。(全くないわけではありませんが)
ですので、通常はポインターを渡すため、
ZZZとすべきかと思いますが・・・・
ZZZの型とoraDyna.Openのプロトタイプが提示されていないので、想像です。

この回答への補足

>ZZZの型
ODatabase *m_hDbc;
↑型じゃない?

ODynasetoraDyna;

class OEXPORT ODynaset : public OOracleObject
{
public:
oresult Open(const ODatabase &odb, const char *sql_statement,
long options = ODYNASET_DEFAULT, OSnapshotID *snapID = NULL);
・・・・・・・・・・
private:
char *m_sqlstmt; // the sql statement that creates the dynaset

// internal helper routines
oresult Copy(const ODynaset &other);
oresult Cleanup(void);
};

です。
Oracle8iと9iでの環境の違いという可能性もありますでしょうか?
現在は9iで試しています。

補足日時:2006/06/06 09:54
    • good
    • 0

*ZZZが初期化(領域確保)されていない?

この回答への補足

>*ZZZが初期化(領域確保)されていない?

ODatabase*ZZZ;


ZZZ = NULL;


ZZZ = new OSession();

と記述はしてあります。
VC初心者の為調べたのですがうまくいきません。

補足日時:2006/06/05 19:04
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!