在本教程中,我們將借助示例了解 C++ malloc() 函數。
C++ 中的malloc()
函數將一塊未初始化的內存分配給一個指針。它在cstdlib 頭文件中定義。
示例
#include <iostream>
#include <cstdlib>
using namespace std;
int main() {
// allocate memory of int size to an int pointer
int* ptr = (int*) malloc(sizeof(int));
// assign the value 5 to allocated memory
*ptr = 5;
cout << *ptr;
return 0;
}
// Output: 5
malloc() 語法
用法:
malloc(size_t size);
這裏,size
是我們要分配的內存大小(以字節為單位)。
參數:
malloc()
函數采用以下參數:
- size- 一個無符號整數值(轉換為
size_t
) 以字節為單位表示內存塊
返回:
malloc()
函數返回:
void
指向函數分配的未初始化內存塊的指針- 空指針如果分配失敗
注意:如果大小為零,則返回的值取決於庫的實現。它可能是也可能不是空指針.
malloc() 原型
cstdlib 頭文件中定義的malloc()
原型為:
void* malloc(size_t size);
由於返回類型是 void*
,我們可以將其類型轉換為大多數其他原始類型而不會出現問題。
示例 1:C++ malloc()
#include <iostream>
#include <cstdlib>
using namespace std;
int main() {
// allocate 5 int memory blocks
int* ptr = (int*) malloc(5 * sizeof(int));
// check if memory has been allocated successfully
if (!ptr) {
cout << "Memory Allocation Failed";
exit(1);
}
cout << "Initializing values..." << endl << endl;
for (int i = 0; i < 5; i++) {
ptr[i] = i * 2 + 1;
}
cout << "Initialized values" << endl;
// print the values in allocated memories
for (int i = 0; i < 5; i++) {
// ptr[i] and *(ptr+i) can be used interchangeably
cout << *(ptr + i) << endl;
}
// deallocate memory
free(ptr);
return 0;
}
輸出
Initializing values... Initialized values 1 3 5 7 9
在這裏,我們使用malloc()
將5 個int
內存塊分配給ptr
指針。因此,ptr
現在充當數組。
int* ptr = (int*) malloc(5 * sizeof(int));
請注意,我們已將類型轉換為空指針由返回malloc(
) 到int*
.
然後我們使用if
語句檢查分配是否成功。如果不成功,我們退出程序。
if (!ptr) {
cout << "Memory Allocation Failed";
exit(1);
}
然後,我們使用for
循環用整數值初始化分配的內存塊,並使用另一個for
循環來打印這些值。
最後,我們使用free()
函數釋放了內存。
free(ptr);
示例 2:大小為零的 C++ malloc()
#include <iostream>
#include <cstdlib>
using namespace std;
int main() {
// allocate memory of size 0
int *ptr = (int*) malloc(0);
if (ptr==NULL) {
cout << "Null pointer";
}
else {
cout << "Address = " << ptr;
}
// deallocate memory
free(ptr);
return 0;
}
輸出
Address = 0x371530
在這裏,我們使用了malloc()
分配int
大小 memory 0到ptr
指針。
int* ptr = (int*) malloc(0);
使用if
語句,然後我們檢查malloc()
是否返回空指針或是否返回地址。
最後,我們使用 free()
釋放內存。
相關用法
- C++ map lower_bound()用法及代碼示例
- C++ map::at()用法及代碼示例
- C++ map max_size()用法及代碼示例
- C++ map begin()用法及代碼示例
- C++ map rbegin()用法及代碼示例
- C++ map::clear()用法及代碼示例
- C++ match_results length()用法及代碼示例
- C++ map size()用法及代碼示例
- C++ match_results begin()、end()用法及代碼示例
- C++ map::operator[]用法及代碼示例
- C++ map::empty()用法及代碼示例
- C++ match_results prefix()、suffix()用法及代碼示例
- C++ map key_comp()用法及代碼示例
- C++ map end()用法及代碼示例
- C++ match_results size()用法及代碼示例
- C++ map value_comp()用法及代碼示例
- C++ map::size()用法及代碼示例
- C++ map swap()用法及代碼示例
- C++ map find()用法及代碼示例
- C++ map upper_bound()用法及代碼示例
注:本文由純淨天空篩選整理自 C++ malloc()。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。