0

Microsoft Visual Studio 2010 で sockaddr_storage を使用しているときに、誰かがメモリ破損を経験しましたか? これは私が問題を抱えている種類のコードです:

class Base 
{
 public:
    Base(){a=1};
    int a;
    sockaddr_storage addr;
    int b;
};

class Derived1 : public Base
{
 public:
    Derived1() {a=2};
    int c;
}

class Derived2 : public Derived1 
{
 public:
    Derived2() {a=3;};
    int d;
}

Derived2 コンストラクターでは、オブジェクト内の 'a' へのオフセットが 4 バイトずれており、'a' を 3 に設定するとメモリが破損します。

よろしく、ドゥサン・ムドリッチ。

4

1 に答える 1

0

次のコード サンプルを使用しても、問題を再現できませんでした。

#include <iostream>
#include <WinSock2.h>

class Base 
{
public:
    Base(){a=1;}
    int a;
    sockaddr_storage addr;
    int b;
};

class Derived1 : public Base
{
public:
    Derived1() {a=2;};
    int c;
};

class Derived2 : public Derived1 
{
public:
    Derived2() {a=3;};
    int d;
};

int main( int argc, char **argv )
{
    Derived2 d;
    std::cout << d.a << std::endl;
    return 0;
}

問題を再現する完全なコード サンプルを投稿していただければ、さらにサポートを提供できる可能性があります。

于 2012-07-12T18:15:18.707 に答える