2012-10-05 75 views
0

我有一个名为xbar的全局结构。我调用了其中的3个,然后将一个局部指针传递给一个函数,在该函数中将其分配给全局函数内的一个短阵列。但是当我尝试使用memcpy复制指向的数据时,出现“异常”错误。使用本地指针指向全局数据的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)); 
} 

回答

3

这是因为在assignPtr()你只分配Xbar[0].close[0]到指针的本地副本qdata。在assignPtr()返回后,qdatamycode()中仍为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)); 
} 
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); 
    // ... 
}