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