我有一个叫做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));
}

最佳答案

这是因为在assignPtr()中,您只将Xbar[0].close[0]分配给指针qdata的本地副本。返回assignPtr()后,qdata中的mycode()仍为空。
您应该将指针传入指针,如下所示:

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));
}

08-18 14:04