C 如果我执行这个程序,我会得到;未能释放";。但在FREE函数中,它只是正确地释放内存
在这段代码中,我只调用了一个分配函数来动态分配内存,然后调用了FREE函数来释放内存,这两个函数只能正常工作。但是在调用自由函数后的主函数内部,为什么仍然测试指向内存的指针呢?这是因为自由函数内部的变量C 如果我执行这个程序,我会得到;未能释放";。但在FREE函数中,它只是正确地释放内存,c,dynamic-memory-allocation,C,Dynamic Memory Allocation,在这段代码中,我只调用了一个分配函数来动态分配内存,然后调用了FREE函数来释放内存,这两个函数只能正常工作。但是在调用自由函数后的主函数内部,为什么仍然测试指向内存的指针呢?这是因为自由函数内部的变量ptr是一个局部变量,更改它只会更改局部变量,函数外部的任何内容都不会被修改 您需要做的是通过引用传递变量,这是C不支持的。C只有通过值传递。但引用参数传递可以使用指针进行模拟。因此,您需要向指针传递一个指针: #include "stdafx.h" #include "stdlib.h" #in
ptr
是一个局部变量,更改它只会更改局部变量,函数外部的任何内容都不会被修改
您需要做的是通过引用传递变量,这是C不支持的。C只有通过值传递。但引用参数传递可以使用指针进行模拟。因此,您需要向指针传递一个指针:
#include "stdafx.h"
#include "stdlib.h"
#include "string.h"
typedef struct
{
int a ;
char b;
char c[50];
}TEST;
void *allocate(int count,int size);
void FREE(TEST *ptr);
int _tmain(int argc, _TCHAR* argv[])
{
TEST *test = NULL ;
void *ptr = NULL ;
ptr = allocate(2,sizeof(TEST));
test = (TEST *)ptr;
test->a = 1;
test->b = 'A';
strcpy(test->c,"siva");
FREE(test);
if(test != NULL) //here Im getting issues, test remains pointing address
printf("\n Failed to free");
else
printf("\n Free Success");
return 0;
}
void *allocate(int count,int size)
{
void *ptr;
ptr = calloc(count,size); // here allocated successfully
return ptr;
}
void FREE(TEST *ptr)
{
free(ptr);
ptr = NULL ; // Deallocated Successfully
}
使用操作员和的地址调用:
void FREE(TEST **ptr);
在函数内部,使用解引用操作符*
访问原始指针变量。您期望得到什么,以及为什么您认为更改局部变量会产生外部影响?另外:不要对函数使用所有大写字母。在C语言中,对于标识符的大小写几乎没有标准,但所有大写==宏都是公认的。
FREE(&test);