Forum: Ders Arası RSS
Dilim işaretçisi, neden işlev dışında bozulur?
Avatar
Salih Dinçer #1
Üye Ock 2012 tarihinden beri · 1912 mesaj · Konum: İstanbul
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: Dilim işaretçisi, neden işlev dışında bozulur?
Merhaba,

Tam olarak nasıl ifade edeceğimi bilmiyorum. Konu başlığı da uyduruk oldu ama kodu denerseniz ne demek istediğimi anlayacaksınız!

Sanırım...:)
  class DilimTest {
    char[] memory;
    size_t konum;
    string[char[]*] AA;
 
    auto malloc(size_t boyut) {
      auto sınır = konum + boyut;
     
      scope(exit) konum += boyut;
     
      return &memory[konum..sınır];
    }
  }
 
  import std.stdio;
 
void main() {
  with( new DilimTest() ) {
    memory = "one"           /* 1 [0..3] */
             "two"           /* 2 [3..6] */
             "three"         /* 3 [5..$] */
             .dup;
//*///                          v----- TEST 1:
    AA[&memory[0..3]] = "bir";
    AA[&memory[3..6]] = "iki";
    AA[&memory[6..$]] = "üç";
/*///                          v----- TEST 2:
    AA[malloc(3)] = "bir";
    AA[malloc(3)] = "iki";
    AA[malloc(5)] = "üç";
//*/    
    AA.writeln; /* print out: (TEST 1)
    
    [7FFF48A052D0:"bir", 7FFF48A052F0:"iki", 7FFF48A05320:"üç"]*/
 
    foreach(ref dilim; AA.keys) {
      writef("%s: %s ", dilim, *dilim);
    } /* print out: (TEST 1)
    7FFF48A052D0: one 7FFF48A052F0: two 7FFF48A05320: three */
 
    writeln;
  }
}/* print out: (TEST 2)
[7FFF651186B0:"üç"]
7FFF651186B0: � 
*/
İkinci test için 23. satırdaki slash'lardan birini kaldırın...
Bilgi paylaştıkça bir bakmışız; kar topu olmuş ve çığ gibi üzerimize geliyor...:)
Avatar
zekeriyadurmus #2
Kullanıcı başlığı: Talha Zekeriya Durmuş
Üye Eki 2012 tarihinden beri · 701 mesaj · Konum: Samsun/Türkiye
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Derleme hatası

Error    1    Error: this.memory[this.konum..sınır] is not an lvalue    c:\users\talhazekeriya\documents\visual studio 2012\Projects\ConsoleApp7\ConsoleApp7\main.d    11   
Error    4    Error: __withSym.memory[cast(uint)6..__dollar] is not an lvalue    c:\users\talhazekeriya\documents\visual studio 2012\Projects\ConsoleApp7\ConsoleApp7\main.d    26   
Error    3    Error: __withSym.memory[cast(uint)3..cast(uint)6] is not an lvalue    c:\users\talhazekeriya\documents\visual studio 2012\Projects\ConsoleApp7\ConsoleApp7\main.d    25   
Error    2    Error: __withSym.memory[cast(uint)0..cast(uint)3] is not an lvalue    c:\users\talhazekeriya\documents\visual studio 2012\Projects\ConsoleApp7\ConsoleApp7\main.d    24   

Zekeriya
Bilgi meraktan gelir...
Avatar
Salih Dinçer #3
Üye Ock 2012 tarihinden beri · 1912 mesaj · Konum: İstanbul
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Tamam şimdi oldu, Eti Eti Eti...:)
(90'lı yıllara gönderme, gençler izlesinler...)
 
  struct Düğüm {
     char[] dilim;
  }
  
  class DilimTest {
    char[] memory;
    size_t konum;
    Düğüm*[char[]*] AA;
    
    auto malloc(size_t boyut) {
      auto sınır = konum + boyut;
      auto düğüm = new Düğüm(memory[konum..sınır]);
 
      AA[&düğüm.dilim] = düğüm;
      konum += boyut;
 
      return &düğüm.dilim;
    }
  }
 
  import std.stdio;
 
void main() {
  with( new DilimTest() ) {
    memory = "one"           /* 1 [0..3] */
             "two"           /* 2 [3..6] */
             "three"         /* 3 [5..$] */
             .dup;
    
    AA.writeln(" memory[ \"", memory, "\" ]");
             
    auto test1 = malloc(3);
        (*test1)[0] = 'b';
        (*test1)[1] = 'i';
        (*test1)[2] = 'r';
    auto test2 = malloc(3);
    auto test3 = malloc(5);
 
    AA.writeln(" memory[ \"", memory, "\" ]");
 
    (*test2)[1] = 'o';
 
    foreach(ref dilim; AA.keys) {
      writef("%s: %s ", dilim, *dilim);
    }
 
    writeln;
  }
}
Bu kod, ilk gönderdiğimden farklı olarak, dilimi bir taşıyıcı (Düğüm) vasıtasıyla hayatta tutuyor. Sanırım Düğüm'ü de hayatta tutan AA dizisi. Aslında kodu, üzerinde çalıştığım MEM sınıfına uyarladım da çok yaklaşmışım. Ancak kod karmaşık olunca, yukarıdaki gibi sade bir şekilde olaya yaklaşmak gerekiyor. Yoksa saç baş yolmaca... :nuts:

Dip Not: Derleme hataları hakkında diyebileceğim bir şey yok. Bende çalışıyorsa sizde de çalışsın kardeşim...:)

Sevgiler, saygılar...
Bilgi paylaştıkça bir bakmışız; kar topu olmuş ve çığ gibi üzerimize geliyor...:)
agora #4
Üye Tem 2013 tarihinden beri · 221 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
ÇIKTI:

[] memory[ "onetwothree" ]
[251FD0:251FD0, 251FB0:251FB0, 251F90
251FD0: bir 251FB0: too 251F90: three
Doğrulama Kodu: VeriCode Lütfen resimde gördüğünüz doğrulama kodunu girin:
İfadeler: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O
Özel Karakterler:
Forum: Ders Arası RSS
Bağlı değilsiniz. · Şifremi unuttum · ÜYELİK
This board is powered by the Unclassified NewsBoard software, 20100516-dev, © 2003-10 by Yves Goergen
Şu an: 2017-11-22, 05:11:07 (UTC -08:00)