- N +

malloc函數的返回值 函數malloc的功能

大家好,今天給各位分享malloc函數的返回值的一些知識,其中也會對函數malloc的功能進行解釋,文章篇幅可能偏長,如果能碰巧解決你現在面臨的問題,別忘了關注本站,現在就馬上開始吧!

c語言函數返回地址

1、函數直接返回一個指針類型即返回地址。2、C語言屬于高級編程語言。在C語言中一個函數不能返回局部地址即指針。例:int*func(void){inta=10;int*p=&a;returnp;}a變量的區域是func()函數,在函數內有效,出了函數就釋放了,此時p指向的是一個未知地址,屬于錯誤用法。正確用法:int*p=NULL;int*func(void){p=malloc(sizeof(int));if(p!=NULL){*p=10;}returnp;}

void默認返回值

調用void函數應將void語句單獨作為命令來執行。

在正常情況下,所謂“無返回值”是不存在的,省略了返回類型的函數,默認為void,表示返回值為“空”,而不是沒有返回值,且在函數結束時默認返回。

malloc失敗的原因

malloc()函數失敗的常見原因:

1.內存不足。

2.在前面的程序中出現了內存的越界訪問,導致malloc()分配函數所涉及的一些信息被破壞。下次再使用malloc()函數申請內存就會失敗,返回空指針NULL(0)。

分析排查原因:

查看方式:

1、內存不足,使用free命令查看當前還有多少內存,看是否合理,之前是否有內存泄漏等。

2、按照流程查看malloc失敗前的幾次malloc、memcpy或字符串拷貝等,查看是否有內存越界。

c動態分配函數有什么用

根據使用函數不同,作用各不相同。共同點均是動態分配一段內存,使用后需要用free函數釋放。所有動態分配函數均聲明在stdlib.h中。

1malloc

void*malloc(unsignedintnum_bytes);

功能

分配長度為num_bytes字節的內存塊

返回值

如果分配成功則返回指向被分配內存的指針(此存儲區中的初始值不確定),否則返回空指針NULL。當內存不再使用時,應使用free()函數將內存塊釋放。函數返回的指針一定要適當對齊,使其可以用于任何數據對象。

說明

關于該函數的原型,在以前malloc返回的是char型指針,新的ANSIC標準規定,該函數返回為void型指針,因此必要時要進行類型轉換。

2calloc

void*calloc(size_tn,size_tsize);

在內存的動態存儲區中分配n個長度為size的連續空間,函數返回一個指向分配起始地址的指針;如果分配不成功,返回NULL。

calloc在動態分配完內存后,自動初始化該內存空間為零,而malloc不初始化,里邊數據是隨機的垃圾數據。

3realloc

void*realloc(void*mem_address,unsignedintnewsize);

功能

先判斷當前的指針是否有足夠的連續空間,如果有,擴大mem_address指向的地址,并且將mem_address返回,如果空間不夠,先按照newsize指定的大小分配空間,將原有數據從頭到尾拷貝到新分配的內存區域,而后釋放原來mem_address所指內存區域(注意:原來指針是自動釋放,不需要使用free),同時返回新分配的內存區域的首地址。即重新分配存儲器塊的地址。

返回值

如果重新分配成功則返回指向被分配內存的指針,否則返回空指針NULL。

注意

當內存不再使用時,應使用free()函數將內存塊釋放。

memcopy函數用法

memcpy是memorycopy的縮寫,意為內存復制,在寫C語言程序的時候,我們常常會用到它。它的函原型如下:

void*memcpy(void*dest,constvoid*src,size_tn);

它的功能是從src的開始位置拷貝n個字節的數據到dest。如果dest存在數據,將會被覆蓋。memcpy函數的返回值是dest的指針。memcpy函數定義在string.h頭文件里。

例子

1.將一個字符串數據復制到一塊內存。

#include<stdio.h>

#include<string.h>

#include<stdlib.h>

#defineN10

intmain(void)

{

char*target=(char*)malloc(sizeof(char)*N);

memcpy(target,"0123456789",sizeof(char)*N);

puts(target);

free(target);

return0;

}

編譯,運行,將輸出:0123456789

END,本文到此結束,如果可以幫助到大家,還望關注本站哦!

返回列表
上一篇:
下一篇: