我有一个叫做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));
}发布于 2012-10-05 08:20:25
这是因为在assignPtr()中,您只将Xbar[0].close[0]赋值给指针qdata的本地副本。assignPtr()返回后,mycode()中的qdata仍然为空。您应该像下面这样传递指针到指针:
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-05 08:19:59
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);
// ...
}https://stackoverflow.com/questions/12737810
复制相似问题