У меня (очевидно) очень простая инициализация класса с двумя конструкторами, и когда я хочу создать новую дружбу, указатель this первого аргумента имеет соответствующее значение указателя, а второй - нет.
Я объясню лучше в коде - это один из моих конструкторов:
Friendship::Friendship(const User &u1, const User &u2){
*user1 = u1;
*user2 = u2;
}
Когда я делаю это в моем классе Test:
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;
}
Это дает мнеошибка EXC_BAD_ACCESS в строке push_back, потому что, по-видимому, указатель «this» пользователя user1 работает, когда он попадает в конструктор и указывает на действительный адрес памяти, но когда он переходит к действиям user2, указатель «this» указывает user2до 0x0, и это не удается, потому что он в основном пытается переопределить NULL, когда он достигает перегрузки operator =.
Пример: когда он пытается создать новую дружбу:
this-> user1'smem address = 0x100100b20 this-> mem2 адрес пользователя = 0x0 - ошибка!
в то время как
адрес памяти u1 = 0x7fff5fbff900 адрес памяти u2 = 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!
Кто-нибудь знает, почему это странное поведение?Даже если я переключу user1 и user2 в моем push_back, он все равно не будет работать на втором.Это всегда второй противный, который никогда не работает.
Ах, это мой заголовочный файл Friendship, ничего сложного.
#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