(不要不屑一顾,以为简单吗,做一下试试,各位请不要调试后,洋洋得意的再来贴出答案)
内存管理 测试题:做以下试题请遵循
1、 依次 做,不要做之前通览!!!!!!!
2、 非上机题,请用你的大脑
试题:
1、
void GetMemery(char *pstr)
{
pstr = (char *)malloc(100);
}
void main()
{
char *str = NULL;
GetMemery(str);
strcpy(str, "hello");
printf(str);
}
此程序运行有什么结果?有什么不妥吗?2、
void GetMemery(char **pstr)
{
*pstr = (char *)malloc(100);
}
void main()
{
char *str = NULL;
GetMemery(&str);
strcpy(str, "hello");
printf(str);
}
3、
void GetMemery(char **pstr)
{
*pstr = (char *)malloc(100);
}
void main()
{
char *str = NULL;
GetMemery(&str);
strcpy(str, "hello");
pintf(str);
free(str);
if (str != NULL)
printf(str);
}
此程序运行有什么结果?有什么不妥吗?其他:(请仔细思考)1、/*******************************************************/ char str[100];
//sizeof(str) = ?/*******************************************************/ char *p = (char *)malloc(sizeof(char)*100);
//sizeof(p) = ?/********************************************************/ void Test(char *p)
{
//sizeof(p) = ?
}/**********************************************************/ void Test2(char str[100])
{
//sizeof(str) = ?
}/**********************************************************/ void main(char str[100])
{
char str[100];
//sizeof(str) = ?
}/************************************************************/
内存管理 测试题:做以下试题请遵循
1、 依次 做,不要做之前通览!!!!!!!
2、 非上机题,请用你的大脑
试题:
1、
void GetMemery(char *pstr)
{
pstr = (char *)malloc(100);
}
void main()
{
char *str = NULL;
GetMemery(str);
strcpy(str, "hello");
printf(str);
}
此程序运行有什么结果?有什么不妥吗?2、
void GetMemery(char **pstr)
{
*pstr = (char *)malloc(100);
}
void main()
{
char *str = NULL;
GetMemery(&str);
strcpy(str, "hello");
printf(str);
}
3、
void GetMemery(char **pstr)
{
*pstr = (char *)malloc(100);
}
void main()
{
char *str = NULL;
GetMemery(&str);
strcpy(str, "hello");
pintf(str);
free(str);
if (str != NULL)
printf(str);
}
此程序运行有什么结果?有什么不妥吗?其他:(请仔细思考)1、/*******************************************************/ char str[100];
//sizeof(str) = ?/*******************************************************/ char *p = (char *)malloc(sizeof(char)*100);
//sizeof(p) = ?/********************************************************/ void Test(char *p)
{
//sizeof(p) = ?
}/**********************************************************/ void Test2(char str[100])
{
//sizeof(str) = ?
}/**********************************************************/ void main(char str[100])
{
char str[100];
//sizeof(str) = ?
}/************************************************************/
解决方案 »
- OnPaint()可不可以代替InvalidateRect
- #define _W64 __w64
- 使用IDirectSound和WaveOutOpen来播放音频导致windows失去响应的问题,急!!!
- 小弟是要毕业的学生,急需一篇图书馆管理系统的设计说明书,不知哪位大侠能帮我给小弟一份,感激不尽。
- 有关树控件
- 问个简单问题:CPrintDialog如何限制纸张只能是横向?
- 数据查询,急求解答!
- 网络拓扑图形的显示
- ATL 开发Composite control (高手请进,进者有分)
- 新手求教|应该怎么使用!
- 如何让程序和windows一起启动?高手指点!!
- 用splitterwnd切出5个view。怎么搞呀。
/**********************************************************/ void Test3(char str[100])
{
char str[100];
//sizeof(str) = ?
}/************************************************************/
/**********************************************************/ void Test3( )
{
char str[100];
//sizeof(str) = ?
}/************************************************************/
非法操作,因为str= NULL.
2、
hello
内存泄漏
3、
hello
非法操作其他:
100
4
4
4 //char str[100]和char str[]等同
100
条件if (str != NULL)一定成立1、
char str[100];
//sizeof(str) = 100/*******************************************************/ char *p = (char *)malloc(sizeof(char)*100);
//sizeof(p) = 4/********************************************************/ void Test(char *p)
{
sizeof(p) = 4
}/**********************************************************/ void Test2(char str[100])
{
//sizeof(str) = 100
}/**********************************************************/ void main(char str[100])
{
char str[100];
sizeof(str) = ???????????
}/************************************************************/
作为一般的函数调用,如果不是引用,那么编译器会给你产生一个temp
变量,然后将调用的值付给temp 变量。准确地说是在stack中压入了一个
值作为传递给函数的值。因此如果你传递一维的指针进去。在函数体里面,
实际上你是给stack上的一个指针分配了内存。当函数退出的时候,stack
被释放掉,因此这块内存就会泄漏。其他的题与此内容相关。
很小的方面。至于blue_coco(潘)则有点肤浅了。In355Hz(好象一条狗)说得不错,高手!!!
在c编译器中:
1.形参是不分配内存的,但要做类型比配。
2.被分配空间的指针变量用完后要释放,还要置为空。
3.sizeof运算浮仅对变量的类型检查。
所以,上面的错误显然而知了:t1,t2都没有释放分配的内存并置为空,t3没有置空。
t2,t3的strcpy(str, "hello");应为strcpy(&str,"hello");/********************************************************/ void Test(char *p)
{
//sizeof(p) = ?
}/**********************************************************/
与
/**********************************************************/ void Test2(char str[100])
{
//sizeof(str) = ?
}/**********************************************************/
是犯了形参是不分配内存的错误,不能用sizeof.
以上是我的拙见。