0

このコードを実行すると、セグメンテーション違反が発生します (コンパイラの警告やエラーは発生しません)。に「テスト」を割り当てようとすると発生するstr->sString

MyClass.cpp
//Constructor
MyClass::MyClass( MyStruct *pDesc )
{   
    pDesc = new MyStruct();

    //This is where I get a segmentation fault  
    pDesc->bar= 0xFF;   

}


MyClass.hpp

class ClGadgetFs
{
    public:
            struct MyStruct{
        int bar;
        };
       MyClass(MyStruct *pDesc = NULL);
};

new を呼び出すときに、構造体のメモリを割り当てていると思いましたか? 私malloc(sizeof(myStruct)) はどこが間違っているのですか?

4

6 に答える 6

4
void setStruct(myStruct *str)
{
   str->sString = "Test";
   str->nNo = 4;
}

int main()
{
    myStruct p;
    setStruct(&p);
    return 0;
}

代わりにこれを行うことができます

編集

int main()
{
   MyStruct *pDesc;
   MyClass myClassInstance( pDesc );
   std::cout<< pDesc->bar << std::endl;
   return 0;
}

MyClass::MyClass( MyStruct *pDesc ) 

に変更する必要があります

MyClass::MyClass( MyStruct *& pDesc )
于 2013-06-13T14:10:51.763 に答える
0

関数内でポインターを変更するには、ポインターへの参照を使用する必要があります。

struct myStruct{
    std::string sStrnig;
    int nNo;
};


void setStruct(myStruct* &str){

    str = new myStruct();

    str->sString = "Test";
    str->nNo = 4;
}

main(){
    struct myStruct *str = 0;
    setStruct( str );
}
于 2013-06-13T14:12:20.177 に答える