中文国产日韩欧美视频,午夜精品999,色综合天天综合网国产成人网,色综合视频一区二区观看,国产高清在线精品,伊人色播,色综合久久天天综合观看

12個(gè)常見C語言面試題及答案(2)

時(shí)間:2024-08-07 21:07:18 學(xué)人智庫 我要投稿
  • 相關(guān)推薦

12個(gè)常見C語言面試題及答案(2)

  if(NULL == ptr)

12個(gè)常見C語言面試題及答案(2)

  {

  printf("\n Malloc failed \n");

  return;

  }

  else

  {

  // Do some processing }

  return; }

  答:盡管上面的代碼并沒有釋放分配給“ptr”的內(nèi)存,但并不會(huì)在程序退出后導(dǎo)致內(nèi)存泄漏。在程序結(jié)束后,所有這個(gè)程序分配的內(nèi)存都會(huì)自動(dòng)被處理掉。但如果上面的代碼處于一個(gè)“while循環(huán)”中,那將會(huì)導(dǎo)致嚴(yán)重的內(nèi)存泄漏問題!

  提示:如果你想知道更多關(guān)于內(nèi)存泄漏的知識(shí)和內(nèi)存泄漏檢測(cè)工具,可以來看看我們?cè)赩algrind上的文章。

  5.free()函數(shù)

  問:下面的程序會(huì)在用戶輸入’freeze’的時(shí)候出問題,而’zebra’則不會(huì),為什么?

  #include int main(int argc, char *argv[]) {

  char *ptr = (char*)malloc(10);

  if(NULL == ptr)

  {

  printf("\n Malloc failed \n");

  return -1;

  }

  else if(argc == 1)

  {

  printf("\n Usage \n");

  }

  else

  {

  memset(ptr, 0, 10);

  strncpy(ptr, argv[1], 9);

  while(*ptr != 'z')

  {

  if(*ptr == '')

  break;

  else

  ptr++;

  }

  if(*ptr == 'z')

  {

  printf("\n String contains 'z'\n");

  // Do some more processing }

  free(ptr);

  }

  return 0; }

  答:這里的問題在于,代碼會(huì)(通過增加“ptr”)修改while循環(huán)里“ptr”存儲(chǔ)的地址。當(dāng)輸入“zebra”時(shí),while循環(huán)會(huì)在執(zhí)行前被終止,因此傳給free()的變量就是傳給malloc()的地址。但在“freeze”時(shí),“ptr”存儲(chǔ)的地址會(huì)在while循環(huán)里被修改,因此導(dǎo)致傳給free()的地址出錯(cuò),也就導(dǎo)致了seg-fault或者崩潰。

  6.使用_exit退出

  問:在下面的代碼中,atexit()并沒有被調(diào)用,為什么?

  #include void func(void) {

  printf("\n Cleanup function called \n");

  return; } int main(void) {

  int i = 0;

  atexit(func);

  for(;i<0xffffff;i++);

  _exit(0); }

  這是因?yàn)開exit()函數(shù)的使用,該函數(shù)并沒有調(diào)用atexit()等函數(shù)清理。如果使用atexit()就應(yīng)當(dāng)使用exit()或者“return”與之相配合。

  7.void*和C結(jié)構(gòu)體

  問:你能設(shè)計(jì)一個(gè)能接受任何類型的參數(shù)并返回interger(整數(shù))結(jié)果的函數(shù)嗎?

  答:如下:

  int func(void *ptr)

  如果這個(gè)函數(shù)的參數(shù)超過一個(gè),那么這個(gè)函數(shù)應(yīng)該由一個(gè)結(jié)構(gòu)體來調(diào)用,這個(gè)結(jié)構(gòu)體可以由需要傳遞參數(shù)來填充。

  8.*和++操作

  問:下面的操作會(huì)輸出什么?為什么?

  #include int main(void) {

  char *ptr = "Linux";

  printf("\n [%c] \n",*ptr++);

【12個(gè)常見C語言面試題及答案(2)】相關(guān)文章:

計(jì)算機(jī)二級(jí)C語言考試選擇題(帶答案)(2)06-10

java面試題及答案10-03

計(jì)算機(jī)二級(jí)c語言考試習(xí)題及答案07-03

名校英語面試經(jīng)典常見的面試題10-21

經(jīng)典常見面試題分析解答08-14

職稱英語衛(wèi)生類C級(jí)真題及答案(word版)(2)06-10

c語言實(shí)習(xí)總結(jié)06-30

c語言讀書筆記09-28

2005年職稱英語考試衛(wèi)生類(C級(jí))試題及答案(2)09-01

2006年職稱英語考試衛(wèi)生類(C級(jí))試題及答案(2)07-24