#ifdefs内部打印值的更改,C

问题描述 投票:0回答:1

我正在尝试使用#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。在打印过程中没有中断触发,那是什么问题?

c preprocessor ifdefine
1个回答
1
投票

您正在写入未分配的内存。看下面的代码:

can_message* message;
message->datalength = size;
message->id = id;

您创建了一个指向message的指针,但从未为其分配内存。然后,取消引用内存(->)并将值写入其中。这可能会破坏size所在的内存位置。

© www.soinside.com 2019 - 2024. All rights reserved.