函式
<cstdlib>

malloc

void* malloc (size_t size);
分配記憶體塊
分配一個大小為size位元組的記憶體塊,並返回指向該塊開頭的指標。

新分配的記憶體塊的內容未初始化,保留未定義值。

如果size為零,則返回值取決於具體的庫實現(它可能是一個也可能不是一個空指標),但返回的指標不得被解引用。

引數

size
記憶體塊的大小(以位元組為單位)。
size_t 是一個無符號整數型別。

返回值

成功時,返回指向函式分配的記憶體塊的指標。
此指標的型別始終為void*,可以將其強制轉換為所需的資料指標型別,以便進行解引用。
如果函式未能分配所需的記憶體塊,則返回一個空指標

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/* malloc example: random string generator*/
#include <stdio.h>      /* printf, scanf, NULL */
#include <stdlib.h>     /* malloc, free, rand */

int main ()
{
  int i,n;
  char * buffer;

  printf ("How long do you want the string? ");
  scanf ("%d", &i);

  buffer = (char*) malloc (i+1);
  if (buffer==NULL) exit (1);

  for (n=0; n<i; n++)
    buffer[n]=rand()%26+'a';
  buffer[i]='\0';

  printf ("Random string: %s\n",buffer);
  free (buffer);

  return 0;
}

此程式生成一個由使用者指定的長度的字串,並用字母字元填充。該字串可能的長度僅受malloc可用記憶體量的限制。

資料競爭

只有返回指標所引用的儲存空間會被修改。呼叫中不會訪問其他儲存位置。
如果函式重用了由釋放函式(如freerealloc)釋放的同一儲存單元,則這些函式會同步進行,以便釋放操作在下次分配之前完全完成。

異常 (C++)

無異常保證:此函式從不丟擲異常。

另見