Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1207468
  • 博文数量: 322
  • 博客积分: 10010
  • 博客等级: 上将
  • 技术积分: 3276
  • 用 户 组: 普通用户
  • 注册时间: 2009-12-17 09:21
文章分类

全部博文(322)

文章存档

2010年(155)

2009年(167)

我的朋友

分类: 嵌入式

2009-12-19 09:18:24

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) |
给主人留下些什么吧!~~