C++ 访问结构数组时打印的垃圾数据

C++ 访问结构数组时打印的垃圾数据,c++,malloc,C++,Malloc,我试图运行以下代码,但它提供了访问结构数组值的垃圾数据。为什么会发生这种情况?我如何解决?一旦我将malloc部分移到main函数,它似乎就可以工作了。但是我想把malloc保存在一个单独的函数中 #include <cstdlib> #include <limits> #include <iostream> using namespace std; /* * */ typedef struct{ float x; float y; }

我试图运行以下代码,但它提供了访问结构数组值的垃圾数据。为什么会发生这种情况?我如何解决?一旦我将malloc部分移到main函数,它似乎就可以工作了。但是我想把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,因为malloc将内存分配给传递给函数的指针的副本。 传递给函数的指针永远不会被分配任何内存或数据

您需要通过引用传递

因为malloc将内存分配给传递给函数的指针的副本。 传递给函数的指针永远不会被分配任何内存或数据

您需要通过引用传递

按地址而不是值传递cd_数据:

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

按地址而不是值传递cd_数据:

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

,那么我如何从main访问它?@user949110:与以前的方法相同,只需将指针的地址而不是指针本身传递给函数。那么我如何从main访问它?@user949110:与以前的方法相同,您只需要将指针的地址而不是指针本身传递给函数。出于好奇,为什么要为5个CoordinatedData分配内存?出于好奇,为什么要为5个CoordinatedData分配内存?