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]了一个指针的本地副本qdataassignPtr()返回后, qdatainmycode()仍然为 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));
}
于 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 回答