私は(明らかに)2つのコンストラクタを持つ非常に単純なクラス初期化を持っています。そして、新しいFriendshipを作成したいとき、最初の引数のthisポインタは適切なポインタ値を持ちます。秒はしません。このポインタはC++で突然0x0になります
私は、コード内でより良い説明します - これは、1つの私のコンストラクタです:
Friendship::Friendship(const User &u1, const User &u2){
*user1 = u1;
*user2 = u2;
}
私は私のテストクラスでこれを行うと:
bool Test::insertFriendship(User *user1, User *user2) {
bool friendshipExists = verifyFriendship(user1, user2);
if(!friendshipExists) {
friendships.push_back(new Friendship(*user1, *user2)); // this is a ptr_vector container
return true;
}
return false;
}
それは私に一backでEXC_BAD_ACCESSエラーを与えますこれは、user1の 'this'ポインタがコンストラクタに到達して有効なメモリアドレスを指しているように見えるためですが、user2を実行するとき、user2の 'this'ポインタは0x0を指しています。それは基本的にオペラに行くとNULLを再見直そうとしていますトル=過負荷。
例:MEMは= 0x100100b20 this-> User2のMEMアドレス= 0x0の対処
this-> USER1年代 - エラー:それは新しい友情を作成しようとすると!
しばらく
U1のMEMアドレス= 0x7fff5fbff900 U2のMEMアドレス=私がしようとすると、いったいそれは動作しませんので、なぜ0x7fff5fbff898
私は意味は、これらのU1とU2 MEMアドレスが有効です。
*user1 = u1; //works cos this is 0x100100b20
*user2 = u2; // fails cos this is 0x0 even though u2 is a valid mem address!
誰もがこの奇妙な動作を知っていますか?私がpush_backでuser1とuser2を切り替えるとしても、それはまだ2番目に動作しません。それは決してうまくいかない厄介な第二のものです。
ああ、これは私のフレンドシップヘッダーファイルです。複雑すぎるものはありません。
#include "User.h"
#ifndef Friendship_h
#define Friendship_h
class Friendship {
friend class Test;
protected:
User *user1;
User *user2;
public:
Friendship(const User &u1, const User &u2);
Friendship(const Friendship &a);
~Friendship();
};
#endif
ポインタを使用しないでください。ポインタを正しく使う方法は誰も知らない。保証される。 –
これは最初のもので動作し、私のオブジェクトのポインタはコンストラクタに渡すとA-okとなり、このポインタ(これは私が正直に操作できない)が問題を与えています。そして、それは初めてで、ちょうど2番目のものではありません(私は3つの "User"オブジェクト引数があれば、最初のものだけが動作すると仮定します)。 – swiftcode