gpt4 book ai didi

c++ - 使用 cin 时的内存损坏 >>

转载 作者:行者123 更新时间:2023-11-28 00:24:40 26 4
gpt4 key购买 nike

我在运行我的代码时遇到奇怪的内存损坏问题。它从以下 block 中的“cin”出现。有趣的是,for 循环第一次运行。内存损坏发生在第二次迭代(当 i = 1 时)。

case 3:
{
// for(int i = 0; i < MAX_PLAYERS; i++)
for(int i = 0; i < 5; i++)
{
mavlink_param_value_t packet_vel, packet_pwr;
float vel_factor;
float power_factor;

strcpy(packet_vel.param_id, "GAME_VEL_FACTOR");
strcpy(packet_pwr.param_id, "GAME_PWR_FACTOR");

printf("Current index %d\n", i);
// cout << "\n" << "Enter Game Velocity Factor:";
// cin >> packet_vel.param_value;
cout << "\n" << "Enter Game Power Factor:";
cin >> power_factor;

printf("Assigning local variable to struct member\n");
packet_pwr.param_value = power_factor;

printf("Packing current message\n");
mavlink_msg_param_value_pack((uint8_t)i,
1,
&messages[i],
packet_vel.param_id,
packet_vel.param_value,
packet_vel.param_type,
1,
1);
}

*cont_mode = true;
break;

错误如下:

Enter message for player 0
Current index 0

Enter Game Power Factor:1
Assigning local variable to struct member
Packing current message
Current index 1

Enter Game Power Factor:2
*** Error in `./send_mavlink_msgs': malloc(): memory corruption (fast): 0x0000000000ccf050 ***
Aborted (core dumped)

谢谢!

更新:

这是我创建“消息”的方式

    mavlink_message_t *messages = (mavlink_message_t *)malloc(num_of_robots*sizeof(mavlink_global_position_int_t));

找到它的定义here

最佳答案

mavlink_message_t *messages = (mavlink_message_t *)
malloc(num_of_robots*sizeof(mavlink_global_position_int_t));

这大概应该是:

mavlink_message_t *messages = (mavlink_message_t *)
malloc(num_of_robots*sizeof(mavlink_message_t));

使用错误的 sizeof 参数将分配错误的空间量。如果 mavlink_global_position_int_t 小于 mavlink_message_t(根据我粗略的谷歌搜索,似乎是这种情况),这是一个严重的问题。


此外,我不熟悉“mavlink”是什么,但从 here 来看:

typedef struct __mavlink_param_value_t
{
int8_t param_id[15]; ///< Onboard parameter id
float param_value; ///< Onboard parameter value
uint16_t param_count; ///< Total number of onboard parameters
uint16_t param_index; ///< Index of this onboard parameter
} mavlink_param_value_t;

param_id 是一个 15 字节的数组。 "GAME_VEL_FACTOR""GAME_PWR_FACTOR" 如果算上末尾的 '\0' 终止符,它们都是 16 字节的字符串。

关于c++ - 使用 cin 时的内存损坏 >>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25649810/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com