GTAMulti - GTA Türkiye

San Andreas Multiplayer => PAWN Kodlama => Yardım Talepleri => Konuyu başlatan: magnet00 - 27 Şubat 2025, 13:48:08

Başlık: Dinamik bellek yönetimi
Gönderen: magnet00 - 27 Şubat 2025, 13:48:08
arkadaşlar iyi günler c dillerinde genelde dinamik bellek yönetimi vardır c# hariç peki pawnoda dinamik bellek yönetimi nasıl yapılır ?

1 - cache den çekilden veri delete ile nasıl silinir
2 - oyuncu oyundan çıktıkdan sonra o oyuncunun bilgilerini bellekten silmek istiyorum yani delete deyminin genel kullanımı hakkında yardımcı olur musunuz , nerelerde kullanılıyor bu kelime
Başlık: Ynt: Dinamik bellek yönetimi
Gönderen: Backup - 27 Şubat 2025, 14:15:01
PAWN'da dinamik bellek yönetimi, C veya C++'taki gibi malloc() ve free() fonksiyonları ile yapılmaz çünkü PAWN'un kendi bellek yönetim sistemi vardır. Ancak, delete kelimesi belirli durumlarda kullanılır.

MySQL eklentisinde, sorgu sonucunda dönen verileri temizlemek için cache_delete() kullanılır. Eğer cache_get_data() ile bir sonuç çektiyseniz, işlem bittikten sonra bellekten silmelisiniz.


PAWN Kodu: Seç
new rows, fields;
cache_get_data(rows, fields); // Cache'deki veriyi al

for (new i = 0; i < rows; i++)
{
    new value[128];
    cache_get_field_content(i, "username", value); // Örneğin kullanıcı adı çekme işlemi
    printf("Kullanıcı: %s", value);
}

// Kullanılmayan veriyi bellekten sil
cache_delete();


PAWN'da delete ifadesi genellikle dinamik array veya referans tipi değişkenleri bellekten silmek için kullanılır.

Örneğin, dinamik olarak oluşturulan bir oyuncu nesnesini temizlemek için:
PAWN Kodu: Seç
new PlayerInfo[MAX_PLAYERS];

public OnPlayerDisconnect(playerid, reason)
{
    delete PlayerInfo[playerid]; // Oyuncu çıktığında bellekteki bilgiyi sil
    return 1;
}

Ancak PAWN'da C gibi tam anlamıyla "dinamik bellek tahsisi" yoktur. Yani malloc() veya new ile bellek tahsis etmezsiniz. Burada delete, new ile oluşturulmuş referans tipli değişkenler için gereklidir.
Başlık: Ynt: Dinamik bellek yönetimi
Gönderen: Murat Budak - 27 Şubat 2025, 15:27:56
Arkadaşın dediğini tam olarak anlamadım ama ben söyle bir yol ile ilerliyorum.


PAWN Kodu: Seç
    new string[124], Cache:cache;
    mysql_format(fs_SQL, string, sizeof(string), "INSERT INTO `orneksql` (`ornek_sutun`) VALUES ('%i')", OrnekVeri);
    cache = mysql_query(fs_SQL, string);
    GuncelSQLID = cache_insert_id();
    cache_delete(cache);

Veriyide silmek için;
PAWN Kodu: Seç
public OnPlayerDisconnect(playerid, reason)
{
oData[playerid][oName][0] = EOS; //String  olan veriyi temizleme
oData[playerid][oAdmin] = 0; //integer olan veriyi temizleme
return 1;
}
Başlık: Ynt: Dinamik bellek yönetimi
Gönderen: magnet00 - 27 Şubat 2025, 22:08:28
tamam teşekkür ettim hocam bir sorum olursa yine dönerim size @Backup