CodeBlanks Logo Icon CodeBlanks

Pointer

Pointer<T> ile C belleğini yönetmeyi öğrenirsin.

Pointer

Pointer<T>, C tarafındaki bir bellek adresini Dart'ta temsil eder. allocate ile bellek ayrılır, free ile geri verilir. Pointer<Int32> bir int, Pointer<Float> bir float taşır.

final ptr = calloc.allocate<Int32>(sizeOf<Int32>());
ptr.value = 42;
print(ptr.value);
calloc.free(ptr);

allocate ve free

Bellek allocate ile alınır, free ile bırakılır. Modern ffi'de calloc veya malloc ile ayrılır ve free edilir. Bellek sızıntısını önlemek için her allocate'e karşılık bir free gerekir.

Uygulama Pointer oluştur

main'de Pointer<Int32>.fromAddress(0) ile bir Pointer oluştur ve address değerini yazdır.

Başlangıç kodu

main.dart
import 'dart:ffi';

void main() {
  // Int32 türünde bir Pointer oluştur, adresi 0 olsun
  // adresini yazdır
}

Örnek çözüm

main.dart
import 'dart:ffi';

void main() {
  final ptr = Pointer<Int32>.fromAddress(0);
  print(ptr.address);
}

Beklenen çıktı

0

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Pointer<T> neyi temsil eder?

  • HTTP isteğini
  • Dart nesnesini
  • C bellek adresini Doğru cevap
  • Widget ağacını

Açıklama: Pointer<T>, C tarafındaki bir bellek adresini Dart'ta sarmalar; Dart nesnesi, widget ve HTTP ffi dışındaki kavramlardır.

2 calloc.allocate çağrısı

Soru
final ptr = calloc.____<Int32>(sizeOf<Int32>());
Cevap
final ptr = calloc.allocate<Int32>(sizeOf<Int32>());

Açıklama: calloc.allocate bellek ayırır; malloc ayrı bir ayırıcı nesnedir (calloc.allocate değil), get ve create ise calloc üzerinde geçerli metodlar değildir.

3 Pointer eşleşmeleri

Kavram Anlamı
Pointer C bellek adresi
allocate Bellek ayırma
free Belleği bırakma
calloc Temizleyen ayırıcı

Uzman seviye bölümündeki tüm dersler