2012-11-28 65 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:和以前一样,只需要将指针的地址而不是指针本身传递给该函数。 –