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