данные о мусоре, напечатанные при доступе к массиву 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

1

Решение

Передать 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

3

Другие решения

Поскольку 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;
}
2

По вопросам рекламы [email protected]