题目四:
修改后
#include<string.h>
void test()
{
char* str = (char*)malloc(100);
strcpy(str, "hello");
if (str != NULL)
{
strcpy(str, "world");
printf(str);
}
free(str);
str = NULL;
}
int main()
{
test();
return 0;
}
源代码
#include<string.h>
void test()
{
char* str = (char*)malloc(100);
strcpy(str, "hello");
free(str);
if (str != NULL)
{
strcpy(str, "world");
printf(str);
}
}
int main()
{
test();
return 0;
}
问题:
1.顺序颠倒——先释放后判断
2.释放时并没有将str置为空指针
3.判断后没有进行释放,导致内存泄漏
题目三:
源代码
#include<string.h>
char* getmemory(char**p,int num)
{
*p = (char*)malloc(num);
}
void test()
{
char* str = NULL;
getmemory(&str, 100);
strcpy(str, "hello");
printf(str);
}
int main()
{
test();
return 0;
}
问题:
对*p无判断无释放
题目二:
修改:
改为:char(*p)[] = "hello world"
源代码
char* getmemory()
{
char p[] = "hello world";
return p;
}
void test()
{
char* str = NULL;
str = getmemory();
printf(str);
}
int main()
{
test();
return 0;
}
问题:
1.输出和“hello world”相同字符数的乱码
2.str是字符指针,p是字符数组
3.p出了作用域就销毁(栈区)
题目一:
更改如下
#include<string.h>
void getmemory(char** p)
{
*p = (char*)malloc(100);
if (*p == NULL)
{
perror("getmemory");
}
}
void test(void)
{
char* str = NULL;
getmemory(&str);
strcpy(str, "hello world");
printf(str);
free(str);
str = NULL;
}
int main()
{
test();
return 0;
}
源代码
#include<string.h>
void getmemory(char* p)
{
p = (char*)malloc(100);
}
void test(void)
{
char* str = NULL;
getmemory(str);
strcpy(str, "hello world");
printf(str);
}
int main()
{
test();
return 0;
}
问题:
1.结果报错无输出
2.test应传str的地址
3.getmemory应该用二级指针接收一级指针,改为char**p
4.getmemory中没有对malloc返回值进行判断,也没有释放p,子函数执行完p的内容会销毁