某公司的面试试题,虽然答案已给出,但理解不透澈,大家帮忙看看。解决方案
某公司的面试试题,虽然答案已给出,但理解不透澈,大家帮忙看看。
//==================================================
//题一
void GetMemory(char *p)
{
p = (char *)malloc(100);
}
int main(void)
{
char *str = NULL;
GetMemory(str);
strcpy(str, "hello world ");
printf(str);
return 0;
}
问:运行main函数会有什么结果?
答:程序崩溃。
因为GetMemory 并不能传递动态内存,
main函数中的str一直都是NULL。
strcpy将使程序崩溃。
疑问:为什么会崩溃
//==================================================
//题二
void GetMemory(char **p)
{
*p = (char *)malloc(100);
}
int main(void)
{
char *str = NULL;
GetMemory(&str);
strcpy(str, "hello world ");
printf(str);
return 0;
}
问:运行main函数会有什么结果?
答:能够输出hello world,但内存泄漏。
疑问:为什么内存泄漏
------解决方案--------------------
去看看高质量C++
------解决方案--------------------
都是林锐的高质量编程上面的题目
题一,main()中的指针并没有分配内存;
题二,分配了内存没有释放,所以内存泄漏,题一其实也内存泄漏
------解决方案--------------------
因为系统不允许使用0指针.
------解决方案--------------------
第一个问题 :参数的传递为单向的值传递!即使指针也是要遵循这个原则的!所以STR的地址不能改变!
第二个问题 就是内存没有释放,感觉 个人原则是有一个MALLOC 就要对应一个FREE
(本人新手,答案不知是否正确 大家指导~)
//==================================================
//题一
void GetMemory(char *p)
{
p = (char *)malloc(100);
}
int main(void)
{
char *str = NULL;
GetMemory(str);
strcpy(str, "hello world ");
printf(str);
return 0;
}
问:运行main函数会有什么结果?
答:程序崩溃。
因为GetMemory 并不能传递动态内存,
main函数中的str一直都是NULL。
strcpy将使程序崩溃。
疑问:为什么会崩溃
//==================================================
//题二
void GetMemory(char **p)
{
*p = (char *)malloc(100);
}
int main(void)
{
char *str = NULL;
GetMemory(&str);
strcpy(str, "hello world ");
printf(str);
return 0;
}
问:运行main函数会有什么结果?
答:能够输出hello world,但内存泄漏。
疑问:为什么内存泄漏
------解决方案--------------------
去看看高质量C++
------解决方案--------------------
都是林锐的高质量编程上面的题目
题一,main()中的指针并没有分配内存;
题二,分配了内存没有释放,所以内存泄漏,题一其实也内存泄漏
------解决方案--------------------
因为系统不允许使用0指针.
------解决方案--------------------
第一个问题 :参数的传递为单向的值传递!即使指针也是要遵循这个原则的!所以STR的地址不能改变!
第二个问题 就是内存没有释放,感觉 个人原则是有一个MALLOC 就要对应一个FREE
(本人新手,答案不知是否正确 大家指导~)