0

xbarと呼ばれるグローバル構造があります。これらのうち3つを呼び出してから、ローカルポインターを関数に渡し、グローバル関数内の短い配列に割り当てます。しかし、memcpyを使用してポイントされたデータをコピーしようとすると、「例外」エラーが発生します。

typedef struct s_xbar
{
    short close[390][9000];
} xbar;
xbar *Xbar;

void assignPtr(short *qdata)
{
    qdata = Xbar[0].close[0];
}

void mycode( void )
{
    Xbar      =  (xbar  *)  calloc( 3,  sizeof(xbar));  

    short *qdata = NULL;
    assignPtr(qdata);

    short dataBarToFill[500];
    memcpy(dataBarToFill, qdata, 90 *  sizeof(short));
}
4

2 に答える 2

3

これは、ポインタのローカルコピーassignPtr()にのみ割り当てられXbar[0].close[0]ているためです。戻った後も、 inはまだNULLです。次のようにポインタからポインタを渡す必要があります。qdataassignPtr()qdatamycode()

void assignPtr(short **qdata)
{
    *qdata = Xbar[0].close[0];
}

void mycode( void )
{
    Xbar      =  (xbar  *)  calloc( 3,  sizeof(xbar));  

    short *qdata = NULL;
    assignPtr(&qdata);

    short dataBarToFill[500];
    memcpy(dataBarToFill, qdata, 90 *  sizeof(short));
}
于 2012-10-05T00:20:25.380 に答える
2

Cは値渡し言語であるため、次のアドレスを渡す必要がありますqdata

void assignPtr(short **qdata)
{
    *qdata = Xbar[0].close[0];
}

void mycode( void )
{
    Xbar      =  (xbar  *)  calloc( 3,  sizeof(xbar));  

    short *qdata = NULL;
    assignPtr(&qdata);
    // ...
}
于 2012-10-05T00:19:58.690 に答える