9.1 填空题
(768) 下面程序的输出是_____,为什么?
char *ptr;
if ((ptr = (char *)malloc(0)) == NULL)
{
puts("Got a null pointer");
}
else
{
puts("Got a valid pointer");
}
(769) 以下程序运行后的输出结果是______ 。
main()
{
char m;
m='B'+32; printf("%c\n",m);
}
已有定义如下:
struct node
{
int data;
struct node *next;
} *p;
以下语句调用malloc函数,使指针p指向一个具有struct node类型的动态存储空间。请填空。
p = (struct node *)malloc(________);
(770) 在绝对地址0xXXXXXXXX上写入字符’a’的语句是___________。
unsigned char *p = (unsigned char *)0xF000FF00;
*p = ‘a’;
9.2 问答与设计
(771) 对下面程序段进行解释:
typedef void (*lpFunction)();
lpFunction lpReset = (lpFunction)0xF000FFF0;
lpReset();
(772) 结合编译优化原理,指出下面程序存在的问题并修改。
int a,b,c;
a = inWord(0x100); // 读取I/O空间0x100端口的内容存入a变量
b = a;
a = inWord (0x100); // 再次读取I/O空间0x100端口的内容存入a变量
c = a;
(773) 以下为常见的内存错误,请分别给出解决措施:
a. 内存分配未成功,却使用了它;
b. 内存分配虽然成功,但是尚未初始化就引用它;
c. 忘记了释放内存,造成内存泄露;
d. 内存释放成功,却继续使用它。
(774) 嵌入式系统中动态分配内存可能发生的问题有哪些?
(775) 请分析下面代码,指出问题并改正:
void GetMemory(T_S8 *p, T_S16 nNum)
{
p = (T_S8 *)malloc(sizeof(T_S8) * nNum);
}
void Test(void)
{
T_S8 *str = NULL;
GetMemory(str, 100);
strcpy(str, "hello");
}
(776) 用malloc()函数更好还是用calloc()函数更好?
(777) 说明变量存储在内存(memory)中的什么地方。
(778) 什么是堆?
(779) 什么是栈?
(780) 什么是页抖动?
(781) 怎样确定一块已分配的内存的大小?
(782) free()函数是怎样知道要释放的内存块的大小的?
(783) 用什么方法存储标志(flag)效率最高?
(784) 8、16位和32位的数是怎样存储的?
(785) 什么是高位字节和低位字节?
(786) 请指出下面代码的错误,并给出修改措施:
T_S8 *itoa (T_S16 n)
{
T_S8 retbuf[20];
sprintf(retbuf, "%d", n); // 将整数转化为字符串
return retbuf; // 希望返回字符串
}
(787) 请指出下面代码的错误,并给出修改措施:
T_S8 *p = NULL;
T_S16 nMemSize = 0;
…
p = malloc(1024);
nMemSize = sizeof(p); // 希望得到这个指针变量所分配的内存块的大小
(788) 使用malloc()函数时,为什么要将其返回值强制转换成被赋值指针变量的数据类型?
(789) 请写出malloc()的函数原型。
(790) 请设计内存检查方法,使其能够避免对访问被分配内存块之外的内存单元进行访问。
(791) 如果对一个指针指向的内存块释放掉,随后又这块内存进行了再分配,因此,刚才被悬挂的指针又指向了新分配的内存块。请设计一种方案查出这类错误。
(792) Test函数的运行结果如何?
void GetMemory(char *p)
{
p = (char *)malloc(100);
}
void Test(void)
{
char *str = NULL;
GetMemory(str);
strcpy(str, "hello world");
printf(str);
}
(793) Test函数的运行结果如何?
char *GetMemory(void)
{
char p[] = "hello world";
return p;
}
void Test(void)
{
char *str = NULL;
str = GetMemory();
printf(str);
}
(794) Test函数的运行结果如何?
Void GetMemory2(char **p, int num)
{
*p = (char *)malloc(num);
}
void Test(void)
{
char *str = NULL;
GetMemory(&str, 100);
strcpy(str, "hello");
printf(str);
}
(795) Test函数的运行结果如何?
void Test(void)
{
char *str = (char *) malloc(100);
strcpy(str, “hello”);
free(str);
if(str != NULL)
{
strcpy(str, “world”);
printf(str);
}
}
(796) 已知函数 strcpy的原型是:
char *strcpy(char *strDest, const char *strSrc);
a. 不调用C的字符串库函数,请编写函数 strcpy
b. strcpy能把strSrc的内容复制到strDest,为什么还要char * 类型的返回值?
阅读(1702) | 评论(0) | 转发(1) |