因仑“3+1”工程特种兵精英论坛
标题:
内存分配与内存释放
[打印本页]
作者:
伊海
时间:
2014-8-8 09:16
标题:
内存分配与内存释放
malloc
1. 某32 位系统下, C++程序,请计算sizeof 的值。
char str[] = “http://www.ibegroup.com/” ;
char *p = str ;
int n = 10;
请计算
sizeof (str ) = ?(1)
sizeof ( p ) = ?(2)
sizeof ( n ) = ?(3)
void Foo ( char str[100]){
}
请计算
sizeof( str ) = ?(4)
void *p = malloc( 100 );
请计算
sizeof ( p ) = ?(5)
复制代码
答案是:
(1).25 (2).4 (3).4 (4).4 (5).4
2. 如程序清单11. 1 所示,请问运行Test 函数会有什么样的结果?
程序清单11. 1 malloc()的应用1
void GetMemory(char *p)
{
p = (char *)malloc(100);
} void Test(void)
{
char *str = NULL;
GetMemory(str);
strcpy(str, "hello world");
printf(str);
复制代码
3. 如程序清单11. 2 所示,请问运行Test 函数会有什么样的结果?
程序清单11. 2 malloc()的应用2
char *GetMemory(void)
{
char p[] = "hello world";
return p;
}
void Test(void)
{
char *str = NULL;
str = GetMemory();
printf(str);
}
复制代码
4. 如程序清单11. 3 所示,请问运行Test 函数会有什么样的结果?
程序清单11. 3 malloc()的应用3
void GetMemory(char **p, int num)
{
*p = (char *)malloc(num);
} void Test(void)
{
char *str = NULL;
GetMemory(&str, 100);
strcpy(str, "hello");
printf(str);
}
复制代码
5. 如程序清单11. 4 所示,请问这个会是输出什么?
程序清单11. 4 malloc()的应用4
#include <stdio.h>
char *str()
{
char *p = "abcdef";
return p;
} int main(int argc, char *
argv[])
{
printf("%s", str());
return 0;
}
复制代码
作者:
伊海
时间:
2014-8-8 09:19
11.2 malloc(0)
1. 把这个独立开来是因为很少这样使用,但是又会使用。如程序清单11. 5 所示,程序会
输出什么?
int main(int argc, char *argv[])
{
char *ptr = NULL;
if ((ptr = (char *)malloc(0)) == NULL)
{
printf("Null pointer\n");
printf("ptr = %#x\n", ptr);
} else
{
printf("Valid pointer\n");
printf("ptr = %#x\n", ptr);
} return 0;
}
复制代码
很多人的第一个感知是输出:Null pointer!
但是很遗憾,是输出Valid pointer!虽然ptr 所开辟的内存空间为0,但是ptr
是不会等于NULL 的
作者:
还你一世界
时间:
2014-8-8 10:02
学到了,都是很精妙的知识点
作者:
hxh
时间:
2014-8-8 12:31
{:soso_e163:}
欢迎光临 因仑“3+1”工程特种兵精英论坛 (http://bbs.enlern.com/)
Powered by Discuz! X3.4