[英]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.