编程语言 C 中的分配

Alloc in programming language C

我将 XDK Bosch 传感器用于一个用 C 语言编程的项目。我的想法是 XDK 应该能够连接到另一个网络。 SSID 和密码通过 MQTT 发送。已经可以在初始化时将 XDK 连接到网络。为了接收 MQTT 消息,使用了下面显示的函数,该函数部分由 Guides of Bosch 改编。每当收到 MQTT 消息时,都会执行此函数。

如果我在上面的函数中使用以下代码而不是 arraySSIDarrayPwd,即使 arraySSIDarrayPwd,我也能够连接到新网络当我在控制台上打印时显示与 testSSIDtestPW 相同的内容。

 char testSSID[] = "TestSSID";
 char testPW[] = "TestPwsd";
 Retcode_T connect_rc3 = NetworkSetup(&testSSID, &testPW);

如果我比较arraySSIDarrayPwdtestSSIDtestPwdsize,则分配给它们的大小不同。 arraySSIDarrayPwd 的大小始终为 4

为此,我使用了以下代码:

 printf("%i \n", sizeof(arraySSID));
 printf("%i \n", sizeof(testSSID));

 printf("%d \n", sizeof(arrayPW));
 printf("%d \n", sizeof(testPW));

我想指出几个问题。

  • C 中的 sizeof() 有点神奇。它不打印动态分配内存的大小。相反,您最好从代码中打印 CountNumberItemsSSID
  • 另一件事是,在 C 语言中,您需要以空字符结尾的字符串。因此,当您以这种方式计算字节数并且希望输出为有效字符串时,请始终允许 1 个额外字符并确保它是 '\0'.
  • 你的填充逻辑,我肯定你正在通过覆盖所有字符串的分配内存来破坏内存。通过为 arraySSID 分配 CountNumberItemsSSID 字节,您只能从 0 写入到 (CountNumberItemsSSID-1),而不是 arraySSID[CountNumberItemsSSID],就像您在 while() 循环中所做的那样。它们绝对应该是 (SSID < CountNumberItemsSSID)。

如果您解决了众多问题中的一部分,我相信它应该可以正常工作。

问题确实是一个指针问题..通过使用

   Retcode_T connect_rc3 = NetworkSetup(arraySSID, arrayPW);

该功能运行良好。我没有考虑到 arrayPW 已经是 char * 类型,因此 &arraySSIDchar **.

类型

我也把(IP <= CountNumberItemsIp)改成了(IP < CountNumberItemsIp)