簡體   English   中英

嘗試打印大字符時出現段錯誤[]

[英]Segfault when trying to printf large char[]

以下代碼在我身上出現段錯誤。

#include <stdio.h>

int main(int argc, char **argv)
{
    const int MEMSIZE = 1024*1024*10;
    char memblock[MEMSIZE];
    memblock[10] = '\0';

    printf("%s", memblock);

    return 0;
}

字符數組有大小限制嗎? 我忘了我所有的C語言,我在這里做蠢事嗎?

通過這個小程序發現最大堆棧大小是多少,並檢查數組是否更大

#include <stdio.h>
#include <sys/resource.h>

int main ()
{
    struct rlimit rl;
    int result = getrlimit(RLIMIT_STACK, &rl);
    printf("max stack size: %u\n", rl.rlim_cur);
}

結果在我的主機上

max stack size: 10485760

局部變量存儲在堆棧中,顯然,它們不能大於其最大大小

這樣對char數組的大小沒有限制,但是與可用堆內存相比,堆棧大小將受到相對限制。 您可能在這里溢出堆棧。 您可以嘗試使memblock靜態

static char memblock[MEMSIZE];

或動態分配

char* memblock = malloc(MEMSIZE);
if (memblock == NULL) {
    printf("Error: failed to allocate %d byte buffer\n", MEMSIZE);
    return -1;
}
memblock[10] = '\0';
printf("%s", memblock);
free(memblock);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM