Jump to content
Forumu Destekleyenlere Katılın ×
Paticik Forumları
2000 lerden beri faal olan, çok şukela bir paylaşım platformuyuz. Hoşgeldiniz.

C++ Sorularim


Öne çıkan mesajlar

Mesaj tarihi:
Evet C++ ögrenmeye basladim. bu baslik altinda kafanizi agritmayi düsünüyorum
diyelim ki elimde struct var su sekilde

struct stack_a {
int size, last, *values;
}

ilk sorum memory olayi.


test stackt_a;

test = ( stack_t *) calloc (1 , sizeof( stack_t ));



buraya kada ok. simdi ikinci pointer icin yer acalim

test->values = (int*) realloc (test->values , 1 * sizeof(int));
test->values[1] = 154214;
ilk veri Ok. ikinci bir veri giricem ve memory büyütmem lazim.

test->values = (int*) realloc (test->values , 2 * sizeof(int));
test->values[2] = 554411;

test->values[1] ne yazikki silindi/üzerine yazildi. realloc yerine malloc mu kullanmam mi gerekli? yoksa bastan belli bir memory ayirmam mi gerekli. hem memory büyültüp hemde verilerin kaybolmasini nasil engellerim?

ikinci sorum söyle

test->values[1] = 8;
test->values[2] = 7;
test->values[3] = 3;
test->values[4] = 9;
test->values[5] = 4;

simdi kendime bir function yazip bana en kücük int degerini geri vermesini istiyorum . en iyi nasil yapabilirim ilk aklima gelen for kullanarak int degeeri bulmak returnlemek.

ücüncü sorum :


test->values[1] = 8;
test->values[2] = 7;
test->values[3] = 3;
test->values[4] = 9;
test->values[5] = 4;


en kücük degeri silmek diger veriler kaliyor. fikri olan ?
Mesaj tarihi:
gcc disinda compiler kullanmadim senelerdir, yaniliyor olabilirim de deklarasyonundan itibaren hata var, en azindan alisildik c++ kodu gibi gozukmuyor

stack_a test;

diye deklare ettik diyelim

birincisi pointer (ve dolasiyila dinamik olarak allocate edilmesi gerektigi anlamini tasiyan) degil bu degisken, alloc callarini gerektiren bir sey yok
ikincisi icindeki degerleri initialize etmiyorsun normal bir sekilde, sifirli da olabilir cop degerler de olabilir

compiler dert yanmazsa

stack_a test = (stack_a){0,0,NULL};

veya class haline getirip constructor olustur, values'un allocationi da icinde olsun oyle NULL falan olacagna

ana konu icinse, indexleri sifirdan baslatman gerekiyor ?
o noktadan bir sonraki int size kadar gittigin yer yine programa ait oldugu icin segfault yememissin sadece

duzeltip tekrar bak, diger sorduklarinda da ayni hata var

sen c# java ikisinden birinde calisiyordun zaten
indexler onlarda da tipik olarak 0'dan baslar, c++ icin 1'den basla diye biri mi yonlendirdi ?
Mesaj tarihi:
birinci soru icin yukaridaki cevaplar. realloc silmez yani.

ikinci soru icin http://www.cplusplus.com/reference/algorithm/sort/

ucuncu soru icin tersten sort et, realloc et.
Mesaj tarihi:
class kullanamam yasak olay modular programming.
malloc kullaninca sorun ortadan kalkiyor.
struct kesin pointer olmak zorunda.
ama ordada tam anlami ile dynamic bir memory olmuyor. sort uzun hikaye belki daha hizli bir yolu vardir diye düsündüm.
Mesaj tarihi:
Malloc kullaninca silinmemesi imkansiz gibi geliyor, sen bir memory request ediyosun OS'ten sana orayi veriyor sonra onu sisteme geri vermeden(delete ile) yeni bir yer request ediyorsun o ilkini kapsayamaz baska yere koymak zorunda.

Degerleri yeni yere otomatik kopyaliyo desem ... o da olmaz. Niye boyle bisey implement etsinler.
Mesaj tarihi:
zgrw said:

ikinci sorun en basit haliyle linear search, 3.su de sort etmek

sort dedim bende yok prof olmaz dedi. downheap 3. soru icin.
ayrica bellek ayiracakmisiz kafamiza göre gerekirse realloc. aslinda cok kolay haftasonu anlatirim.
Mesaj tarihi:
2 ve 3'u birlikte yapsana mis gibi. Min-heap yaratirsin iste theta(N) complexity ile hem min'i return edersin hem de sonrasinda silersin. Search'e, sort'a falan gerek yok.
  • 3 hafta sonra ...
Mesaj tarihi:
simdi bir C sorum var bir headerimiz var


typedef struct {
iEntry_t *first;
iEntry_t *last;
} iDB_t;
void loadDB(iDB_t *db, char *dbn, char *path);


simdi mainimizde de bir iDB yaratiyoruz.

iDB_t *dbtmp = malloc(sizeof(iDB_t ));


sonra bunu load fonksiyorunu yolluyoruz. bu fonksiyorun baska bir C file'da.


load(dbtmp, NULL, NULL);



dbtmp load fonksiyonu icinde OK yani veri var. ama
main geri gelince bos. pointerda nerde hata yapiyorum?
×
×
  • Yeni Oluştur...