释放浮动**的正确方法是什么,如下所示。
例如float ** someArray
for(int i = 0; i < numberOfDimensions; i++)
{
somearray[i] = (float *) malloc(numberOfDimensions * sizeof(float));
}
释放浮动**的正确方法是什么,如下所示。
例如float ** someArray
for(int i = 0; i < numberOfDimensions; i++)
{
somearray[i] = (float *) malloc(numberOfDimensions * sizeof(float));
}
如果您已经 malloc 了另一轮内存并将其分配给原始数组中的每个浮点指针,那么您也应该事先释放它们:
int i;
for (i = 0; i < numberOfDimensions; i++)
free(someArray[i]);
// and free the container array only now
free(someArray);
P.s.:不要强制转换 malloc 的返回值。
倒退:
for(int i = 0; i < numberOfDimensions; i++)
{
free(somearray[i]);
}
free(somearray);
我相信您应该释放元素,然后释放数组。
好吧,在这种情况下,您只需释放(someArray)。现在,如果您 malloc'd 更多内存并将其添加到 someArray,那么您需要遍历该数组并释放每个对象。
换句话说,如果您:
for(int i=0; i< whatever; ++i) {
someArray[i] = malloc(...
}
然后你需要在释放 someArray 之前再走一遍并释放它。
只是一个简单的 1-free()
调用:
free(someArray);
for(int i = 0; i < numberOfDimensions; i++)
{
free(somearray[i]);
somearray[i] = NULL;
}
free(somearray);
somearray=NULL;
(somearray[i] = NULL) 此行将断开每个数组元素的链接,最后 (somearray=NULL) 将断开与数组的链接。这两行将释放动态内存数组,操作系统将释放的内存分配给其他进程