0

さて、マップから構造体 sockaddr_in を取得しようとすると、tmp var を使用してメソッド sendto を使用してソケット経由で構造体 sockaddr_in を送信するという問題があります。

map<string,struct sockaddr_in> userToAddrStrct;

recvfrom を呼び出した後、名前をキーとして構造体 sockaddr をマップに配置しました。次に、別のリクエストでそのアドレスを再度取得しようとすると、取得します。

string getUserOfCurrAddr()
{ 
    //recAddr is the (struct sockaddr_in) i initially use with recvfrom() method to receive address
    struct sockaddr_in* address = (struct sockaddr_in*)&recAddr;
    string aTmp = "";     
    map<string,struct sockaddr_in>::iterator i;
    for(i=userToAddrStrct.begin(); i != userToAddrStrct.end(); i++) {
        cout << "before checkEQ call\n";
        if(checkAddrEq(i->second,*address) == 0) {
            aTmp = i->first;
        }
    }
    return aTmp;
}
string username = getUserOfCurrAddr();
map<string, struct sockaddr_in>::iterator sockIt = userToAddrStrct.find(username);

次に、このマップの内容を印刷しようとすると、seg fault 11 が発生します。印刷に使用したコードは次のとおりです。

for(map<string,struct sockaddr_in>::iterator isu = userToAddrStrct.begin(); isu != userToAddrStrct.end(); isu++) {
        cout << "User: " << isu->first << " with address: " << stringAddr(isu->second) << " with port #: " << isu->second.sin_port <<"\n"; 
    }

どんな助けでも大歓迎です。私は c++ が苦手で、リファレンスが悪い可能性があります。

ありがとうございます!!!!

4

0 に答える 0