动态分配卡住了

时间:2017-03-10 14:53:14

标签: c dynamic-allocation

我正在编写一个在TI芯片中运行的代码,我的代码在以下代码中被卡住了

vh

UART_read的作用并不重要。

但重要的是realloc功能。

我第一次接触到该代码时,它做得很好。 但第二次它被卡住了。 这是一个普通的代码应该工作,问题是芯片或操作系统吗?

1 个答案:

答案 0 :(得分:0)

我想,你应该发布整个代码。 在第一个循环之前,您分配大小为“byteOfMessage”的消息缓冲区 但是在第一个循环中,您重新分配更大的消息(+10)。 它可以工作,但有时如果系统无法再分配10个字节则无法工作。 所以你应该尝试在realloc之后测试tempMessage。它可能是NULL!

以下代码应该有效:

    UChar* message;
UChar* tempMessage;
message = malloc(bytesOfMessage * sizeof(UChar));
int i = 0;
while (true)
{
    int rxBytes = UART_read(handle, rxBuf, 1);

    //System_printf("%d \n",  rxBuf[0]);
    if (rxBuf[0] != 13)
    {
        message[i] = rxBuf[0];
        i++;
        int l = 1;

        if (i == bytesOfMessage)
        {
            System_printf("first Message: \n");
            for (l = 0; l<bytesOfMessage; l++)
            {
                //System_printf("%c",message[l]);
            }
            System_printf("End of first Message\n");

            bytesOfMessage += 10;

            tempMessage = (UChar*)realloc(message, bytesOfMessage * sizeof(UChar));
            if (tempMessage == NULL)
            {   /* system can't realloc more bytes */
                tempMessage = malloc(bytesOfMessage * sizeof(UChar));
                memcpy(tempMessage, message, bytesOfMessage - 10);
                free(message);
            }
            message = tempMessage;
            tempMessage = NULL;


            System_printf("Message2 %d: \n", bytesOfMessage);
            for (l = 0; l<bytesOfMessage; l++)
            {
                //System_printf("%c", message[l]);
            }
            System_printf("End of second Message\n");
        }
        UART_write(handle, rxBuf, rxBytes);
    }
    else
    {
        rxBuf[0] = '\r';
        rxBuf[1] = '\n';
        rxBuf[2] = 'n';
        rxBuf[3] = 'e';
        rxBuf[4] = 'w';
        UART_write(handle, rxBuf, 5);
    }
}

此外,您应该清理您的代码。 祝你好运。