Я пытаюсь запустить следующий код, но он дает мне ненужные данные при доступе к значениям массива структуры. Почему это происходит и как я могу это исправить? Как только я перемещаю часть 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
Передать 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
Поскольку 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;
}