[Çözüldü] Basit bir soru

Başlatan Ali Osman, 10 Ocak 2017 - 21:01:45

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

Ali Osman

C'de;

Char *a[1000000];

Gibi char türünden bir gösterici dizi tanımlarken en fazla 1.000.000 elemanlı açabiliyorum. Daha fazla elemanlı açmak istediğimde program çöküyor. Acaba benim makinadan mı yoksa başka bir şey mi?
İşlemci ön bellek: 1024 kb
İşletim sistemi: ubuntu 32 bit
Ram: 3 gb

Amenofis

32 bit sistemde 4mb yığın (stack) alanı eder, kritik bir miktar. Yığın alanı geçici olarak küçük veriler için kullanılır. Birkaç kb tan ötesi için ayrı bir bölgeden bellek istenmeli. Küçük bir örnek yazayım.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
    char **a_ptr = (char **) malloc(sizeof(void *) * 10000000);

    const char *str = "ubuntu-tr\n";
    char *dinamik_str = (char *) malloc(strlen(str) + 1);
    strcpy(dinamik_str, str);
    
    a_ptr[99] = dinamik_str;
    printf("%s", a_ptr[99]);
    
    free(a_ptr[99]);
    free(a_ptr);
    return 0;
}

Sh4oTT

[mention=615182]@Amenofis[/mention] hocam arkadas 1.000.000 bit lik yer almış stack 4mb ise yeterli olması gerekir yanlışmı anladım acaba :/

Amenofis

[mention=615221]@Sh4oTT[/mention]

Hayır 1 milyon işaretçi var orada. 32 bit sistemde işaretçiler 4 byte, yani toplamda 4 milyon byte. O da yaklaşık 4mb demek.

Windows 1mb stack veriyor mesela, bu kod linuxta çalışsa bile taşınabilir olmaz. O yüzden dinamik olarak tahsis edilmeli.

Sh4oTT


Ali Osman

Teşekkürler Amenofis hocam. Dinamik ayırınca oldu.