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