题目四:
修改后
- #include
- 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
- 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
- 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
- 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
- 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的内容会销毁