快速提问:我是一个调试 C++ 应用程序的 C# 人,所以我不习惯内存管理。

在以下代码中:

for(int i = 0; i < TlmMsgDB.CMTGetTelemMsgDBCount(); i++)
  {
    CMTTelemetryMsgCls* telm = TlmMsgDB.CMTGetTelemetryMsg(i);
    CMT_SINT32_Tdef id = telm->CMTGetPackingMapID();

    ManualScheduleTables.SetManualMsg(i,id);
    ManualScheduleTables.SetManExec(i,false);
  }

我是否在 CMTTelemetryMsgCls* telm = TlmMsgDB.CMTGetTelemetryMsg(i); 的每次迭代 b/c 中泄漏内存? “CMTGetTelemetryMsg(int)”方法返回一个指针。

我是否必须在每次迭代结束时使用“delete telm;”?

最佳答案

这个问题没有全局性的答案。

这实际上取决于此人如何使用返回值实现函数。

  • 它可能会返回一个分配在堆上的变量,并期望你删除它
  • 它可能会返回一个成员变量指针,甚至不在堆上
  • 如果它的返回值在堆上,TlmMsgDB 可能会做自己的内存管理

  • 您需要查看您正在调用的函数的实现:TlmMsgDB.CMTGetTelemetryMsg

    关于c++ - For 循环中的指针,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2562540/

    10-11 21:21