2012-11-28 111 views
1

我試圖運行下面的代碼,但它在訪問結構數組值時給了我垃圾數據。爲什麼會發生這種情況,我該如何解決這個問題?一旦我將malloc部件移到主函數中,它似乎就可以工作。但是我想把malloc保存在一個單獨的函數中。在訪問結構數組時打印的垃圾數據

#include <cstdlib> 
#include <limits> 
#include <iostream> 
using namespace std; 

/* 
* 
*/ 
typedef struct{ 
    float x; 
    float y; 
} CoordinateData; 

void tester(CoordinateData* cd_data){ 
    cd_data = (CoordinateData*)malloc(5*sizeof(CoordinateData)); 
    CoordinateData data = {41.2525,74.0744}; 
    *cd_data = data; 

} 
int main(int argc, char** argv) { 

    CoordinateData* cd_data; 
    tester(cd_data); 
    std::cout << (*cd_data).x << "::" << (*cd_data).y << std::endl; 
} 

輸出我得到的是2.42126e-39 :: - 1.51015e-05 的預期結果是41.2525 :: 74.0744

+1

出於好奇,爲什麼要爲5個CoordinateData分配內存? – juanchopanza

+0

只是隨機的。沒有理由 – user949110

回答

3

通cd_data:

void tester(CoordinateData** cd_data) 
{ 
    *cd_data = (CoordinateData*)malloc(5*sizeof(CoordinateData)); 
    CoordinateData data = {41.2525,74.0744}; 
    *(*cd_data) = data; 
} 

int main(int argc, char** argv) 
{ 
    CoordinateData* cd_data = NULL; 
    tester(&cd_data); 
    std::cout << (*cd_data).x << "::" << (*cd_data).y << std::endl; 
    free(cd_data); 
    return EXIT_SUCCESS 
} 

還要注意的main()返回值,你失蹤。也。這個問題被標記爲C和C++。如果是後者,請使用newdelete[]而不是mallocfree

2

由於malloc分配內存給你傳遞給指針的副本你的功能。
傳遞給函數的指針永遠不會被分配任何內存或數據。

您需要通過參考。通過地址,沒有價值

//Call function as 
tester(&cd_data); 

//Function Implementation 
void tester(CoordinateData** cd_data) 
{ 
    *cd_data = (CoordinateData*)malloc(5*sizeof(CoordinateData)); 
    CoordinateData data = {41.2525,74.0744}; 
    *(*cd_data) = data; 
} 
+0

那麼我怎麼能從主要訪問它? – user949110

+0

@ user949110:和以前一樣,只需要將指針的地址而不是指針本身傳遞給該函數。 –