單項選擇題

?C語言標準庫中提供的動態(tài)分配內(nèi)存函數(shù)包括:

?以下關(guān)于這些函數(shù)描述中,錯誤的是()。

A.程序結(jié)束后,從堆區(qū)申請的內(nèi)存空間不會被系統(tǒng)自動釋放,導致該內(nèi)存不能再被使用(稱為內(nèi)存泄露)。用free函數(shù)可以釋放_Memory所指向的內(nèi)存空間
B.free只是釋放指針指向的內(nèi)容,該指針還指向原地方(此時的指針稱為野指針)。操作野指針可能導致不可預料的錯誤。所以,使用free釋放指針指向的空間后,應將指針的值置為NULL
C.realloc函數(shù)可以重新_NewSize字節(jié)的內(nèi)存空間,該空間為用malloc等函數(shù)已經(jīng)申請的空間,_Memory指向該空間的首地址。如果_NewSize小于或等于_Memory之前所指向的空間大小,保持原有狀態(tài)不變。如果_NewSize大于原來_Memory之前所指向的空間大小,系統(tǒng)會出錯
D.malloc函數(shù)可以從堆區(qū)申請_Size字節(jié)的內(nèi)存空間。如果申請成功,返回所分配內(nèi)存空間的首地址;如果申請失敗,返回值為NULL


您可能感興趣的試卷

你可能感興趣的試題

1.單項選擇題?對于通用搜索函數(shù)void*search(void*a,void*k,int n ,int m),假如有char*os[]={"dos","win","centos","ubuntu","mac"};char*k ="linux";正確的調(diào)用語句是()。

A.int *r=NULL;for(int j=0;j< 5;j++){r=search(os[j],k,5,sizeof(char));if(r!=NULL)break;}
B.int *r=NULL;for(int j=0;j< 5;j++){r=search(os[j],k,6,sizeof(char *));if(r!=NULL)break;}
C.search(os,k,5,sizeof(char ));
D.search(os,k,5,sizeof(char *));

2.單項選擇題?對于通用搜索函數(shù)void*search(void*a,void*k,int n ,int m),參數(shù)n表示元素個數(shù),m表示的是什么?()

A.要查找的數(shù)據(jù)
B.要查找的數(shù)據(jù)的數(shù)據(jù)元素的下標
C.要查找的數(shù)據(jù)的數(shù)據(jù)類型
D.要查找的數(shù)據(jù)的數(shù)據(jù)類型所占字節(jié)數(shù)

3.單項選擇題要調(diào)用void swap(void *a ,void *b ,int size )函數(shù)交換兩個字符串char *s1=strdup("hello");char *s2=strdup("world");調(diào)用語句為()。

A.swap(&s1,&s2,sizeof(void *));
B.swap(s1,s2,sizeof(void *));
C.swap(&s1,&s2,sizeof(char *));
D.swap(s1,s2,sizeof(char *));

4.單項選擇題?對于通用搜索函數(shù)void*search(void*a,void*k,int n ,int m,int (*compare)(void *,void *)),假如有char*os[]={"dos","win","centos","ubuntu","mac"};char*k ="linux";cmp是一個比較函數(shù),則正確的調(diào)用語句是()。

A.search(os,k,5,sizeof(char ),cmp);
B.search(os,k,5,sizeof(char ),cmp());
C.search(os,&k,5,sizeof(char *),cmp);
D.search(os,&k,5,sizeof(char *),cmp());

5.單項選擇題?要實現(xiàn)通用隊列,設計queue,定義類型為:typedef struct{void *buf;int front,rear;int max;int size;}queue;其中,buf為隊列的首地址,front指向隊頭,rear指向?qū)ξ玻琺ax為隊列容量,size為隊列元素所占字節(jié)數(shù)。元素出隊列的函數(shù)void out(queue *q ,void *val)的代碼為()。

A.void *addr =(char *)q->buf +q->rear *q->size;memcpy(addr,val,q->size);q->rear++;
B.void *addr =(char *)q->buf +q->rear *q->size;memcpy(val,addr,q->size);q->rear++;
C.void *addr =(char *)q->buf +q->front *q->size;memcpy(addr,val,q->size);q->front++;
D.void *addr =(char *)q->buf +q->front *q->size;memcpy(val,addr,q->size);q->front++;