GTK Gossip: 記憶體配置

GLib 提供了對C標準 malloc ()、calloc、realloc()、free() 等函式的可攜版本記憶體相關處理函式,例如g_malloc()、 g_malloc0()、g_realloc()、g_free()等函式,例如g_malloc()定義如下:

gpointer g_malloc (gsize n_bytes);


g_malloc0()則是會在配置記憶體之後,將所有的值設定為0,以下舉個簡單的動態陣列配置的例子:

  • g_malloc_demo.c
#include <glib.h>

int main(int argc, char *argv[]) {
int size = 0;

printf("請輸入陣列長度:");
scanf("%d", &size);
int *arr = g_malloc0(size * sizeof(int));

int i;

printf("顯示元素值:/n");
for(i = 0; i < size; i++) {
printf("arr[%d] = %d/n", i, *(arr+i));
}

printf("指定元素值:/n");
for(i = 0; i < size; i++) {
printf("arr[%d] = ", i);
scanf("%d" , arr + i);
}

printf("顯示元素值:/n");
for(i = 0; i < size; i++) {
printf("arr[%d] = %d/n", i, *(arr+i));
}

g_free(arr);

return 0;
}


一 個執行結果如下所示:

請輸入陣列長度:3
顯示元素值:
arr[0] = 0
arr[1] = 0
arr[2] = 0
指定元素值:
arr[0] = 1
arr[1] = 2
arr[2] = 3
顯示元素值:
arr[0] = 1
arr[1] = 2
arr[2] = 3


g_malloc()配置失敗,則應用程式會中止,您可以使用g_try_malloc(),在配置失敗後會傳回 NULL值。

如果要建立struct配置,則可以 使用g_new(),使用g_new0()則會將所有strut初始為0,例如:

#include <glib.h>

struct _Ball {
    char color[10];
    double radius;
};
typedef struct _Ball Ball;

int main(int argc, char *argv[]) {
    Ball *ball = g_new(Ball, 3);
 
    ....
   
    return 0;
}


傳回的指標已經是相對應的型態,無需再進行CAST。

您可以看看 Memory Allocation 了解更多有關 GLib 的記憶體配置函式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值