首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

双重指针内存释放有关问题

2012-04-22 
双重指针内存释放问题void GetMemory2(char **p, int num){*p (char *)malloc(sizeof(char) * num)}voi

双重指针内存释放问题
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;
}

[解决办法]

[解决办法]
单步跟踪进去看看你是不是重复释放了
[解决办法]

[解决办法]
虽然这句等于没有执行,但是memset(letters,letterNum,0);是干什么的?
STORAGE_DEVICE_NUMBER的定义是什么,发上来看看。
[解决办法]
C/C++ code
[b]*letters = (TCHAR *)malloc(letterNum * sizeof(TCHAR));memset(*letters, 0, letterNum * sizeof(TCHAR));[/b]
[解决办法]

[解决办法]

[解决办法]
1 你这个不是 “释放二级指针”。
2 乍一看,不知道你循环 sizeof(DWORD) * 8 次是啥意思(深究是在太费时间)。
3 你也可以用 GetLogicalDriveStrings

热点排行