gpt4 book ai didi

c - 动态分配卡住

转载 作者:行者123 更新时间:2023-11-30 19:35:24 25 4
gpt4 key购买 nike

我正在编写要在 TI 芯片中运行的代码,但我的代码在执行以下代码时卡住了

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;
//message = realloc(message, bytesOfMessage * sizeof(UChar));


tempMessage = (UChar*)realloc(message, bytesOfMessage * sizeof(UChar));
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);
}
}

UART_read 做什么并不重要。

但重要的是realloc函数。

我第一次使用该代码时,它运行良好。但第二次就卡住了。这是应该可以工作的正常代码吗?问题出在芯片还是操作系统上?

最佳答案

我认为,你应该发布整个代码。在第一个循环之前,您分配大小为“byteOfMessage”的消息缓冲区但在第一个循环中,您重新分配了具有更大大小 (+10) 的消息。它可以工作,但有时如果系统无法再分配 10 个字节,则无法工作。因此,您应该尝试在重新分配后测试 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);
}
}

您还应该清理您的代码。祝你好运。

关于c - 动态分配卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42721274/

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