運行我的代碼時出現奇怪的內存損壞。它來自下面塊中的「cin」。有趣的是,for循環第一次運行。 momory腐敗發生在第二次迭代中(當i = 1時)。使用cin時的內存損壞>>
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
「內存損壞」幾乎總是應該被解讀爲「我試圖做你告訴我的內容,但內存已經損壞,我無法做到這一點。」這意味着'cin >>'不是錯誤,發生了_before_錯誤。由於'malloc'檢測到了腐敗,99%的時間意味着你意外地寫了一個動態分配數組的末尾。 – 2014-09-03 16:59:55
您需要在這些'cout'中放置'endl'而不是'\ n',否則輸出緩衝將會給您錯誤發生的錯誤信息。 – 2014-09-03 17:00:55
什麼是'messages'?請說明如何初始化該變量。 – 2014-09-03 17:05:50