【发布时间】:2014-09-24 04:11:19
【问题描述】:
这方面已经有很多东西了。他们似乎都暗示你需要做的就是每次调用 malloc 时都调用 free ,并且可能最后释放“指针的指针” - 所以你最终不会在释放后引用该内存
例如,如果我有
int** myPtr
那我只需要
free(myPtr[j])
对于每一个j,在最后释放指针的指针之前
free(myPtr)
酷。我在我的程序中已经这样做了几次,它似乎工作得很好——除了一种情况。我试图弄清楚这个案例有什么不同,并且我能够在一个最小的程序中复制这个症状。
#include "stdafx.h"
#include <stdlib.h>
signed char** getPtr()
{
unsigned char n = 10;
unsigned char k = 2;
signed char** myPtr = (signed char**)malloc(n*sizeof(signed char));
if (myPtr == NULL) {return NULL;}
for (unsigned char i = 0; i < n; i++)
{
myPtr[i] = (signed char*)malloc(k*sizeof(signed char));
if (myPtr[i] == NULL) {return NULL;}
}
for (unsigned char j = 0; j < n; j++)
{
for (unsigned char k = 0; k <= 1; k++)
{
myPtr[j][k] = 42;
}
}
return myPtr;
}
int _tmain(int argc, _TCHAR* argv[])
{
signed char** potato = getPtr();
if (potato != NULL)
{
for (unsigned char j = 0; j < 10; j++)
{
free(potato[j]);
}
free(potato);
}
return 0;
}
【问题讨论】:
-
这是一个 C 问题,还是一个 C++ 问题。这是两种不同的语言,正确答案取决于这种差异。
-
我目前正在处理一个由 C++ 文件组成的项目,但如果 C 的答案不同,我也想知道。
-
在 C++ 中最好不要使用 malloc 系列函数,有更好的选择。
-
选择一种语言并坚持下去。如果您使用的是 C++,那么 malloc 系列函数或数组就是完全错误的。获得一本好的 C++ 书籍。我想知道人们从哪里不断获得这样的想法,即在 C++ 中使用数组或 malloc 是可以的,或者“C/C++”是一个可以大声呼喊的实体。它是由非法街头经销商兜售的还是什么?
-
@n.m.蹩脚和过时的教育系统是我的猜测