双重指针内存释放问题
void GetMemory2(char **p, int num)
{
*p = (char *)malloc(sizeof(char) * num);
}
void Test(void)
{
char *str=NULL;
GetMemory=(&str);
strcpy(str,"hello world");
printf(str);
}
经典的问题,这段函数是运行正常的,但是明显内存泄漏,如何释放这段函数malloc的空间啊
在Test()中free(str);或者free(&str);程序都崩溃啊
[解决办法]
你这段代码明显编译不过啊,GetMemory=(&str);是什么?如果是GetMemory2(&str);你参数个数也不对啊。
- C/C++ code
void GetMemory2(char **p, int num){*p = (char *)malloc(sizeof(char) * num);}void Test(void){ char *str=NULL; GetMemory2(&str,100); strcpy(str,"hello world"); printf(str); free(str);}
[解决办法]
#include <stdio.h>
#include <string.h>
#include <malloc.h>
void GetMemory(char **p, int num)
{
*p = (char *)malloc(sizeof(char) * num);
}
int main()
{
char *str=NULL;
GetMemory(&str, 50);
strcpy(str,"hello world");
printf(str);
free(str);
return 0;
}
[解决办法]如需要阅读该回复,请登录或注册CSDN!
[解决办法]
单步跟踪进去看看你是不是重复释放了
[解决办法]如需要阅读该回复,请登录或注册CSDN!
[解决办法]
虽然这句等于没有执行,但是memset(letters,letterNum,0);是干什么的?
STORAGE_DEVICE_NUMBER的定义是什么,发上来看看。
[解决办法]
- C/C++ code
[b]*letters = (TCHAR *)malloc(letterNum * sizeof(TCHAR));memset(*letters, 0, letterNum * sizeof(TCHAR));[/b]
[解决办法]如需要阅读该回复,请登录或注册CSDN!
[解决办法]如需要阅读该回复,请登录或注册CSDN!
[解决办法]
1 你这个不是 “释放二级指针”。
2 乍一看,不知道你循环 sizeof(DWORD) * 8 次是啥意思(深究是在太费时间)。
3 你也可以用 GetLogicalDriveStrings