我正在尝试使用#ifdef进行调试,以减少代码中活动的printfs数量,但是#ifdef内部打印的值与外部打印的值不同。
printf("Number of bytes: %d\n", size);
can_message* message;
message->datalength = size;
message->id = id;
for (int i; i < size; i++)
{
message->data[i] = data[i];
}
#ifdef CAN_MESSAGE_INIT_DEBUG
printf("Number of bytes: %d\n", size);
printf("Message created, ID: %d, datalength: %d, ",message->id, message->datalength);
for (int i; i < message->datalength; i++)
{
printf("%d, ", message->data[i]);
}
printf("\n");
#endif
哪个给出以下输出:
Number of bytes: 3
Number of bytes: +2422235261Q
我目前正在Atmel Studio中编写Atmega162。在打印过程中没有中断触发,那是什么问题?
您正在写入未分配的内存。看下面的代码:
can_message* message;
message->datalength = size;
message->id = id;
您创建了一个指向message
的指针,但从未为其分配内存。然后,取消引用内存(->
)并将值写入其中。这可能会破坏size
所在的内存位置。