2012-10-05 114 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); 
    // ... 
}