memcpy使用本地指针指向全局数据

时间:2012-10-05 00:16:51

标签: c pointers data-structures global-variables

我有一个名为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));
}

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分: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);
    // ...
}