我正在尝试运行以下代码,但它为我提供了访问struct数组值的垃圾数据。为什么会发生这种情况?我该如何解决这个问题?一旦我将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
答案 0 :(得分: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 ++。如果是后者,请使用new
和delete[]
代替malloc
和free
答案 1 :(得分: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;
}