试图printf大char []时的Segfault

时间:2013-01-22 10:05:08

标签: c segmentation-fault printf

以下代码是我的分歧。

#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,我在这里做些蠢事吗?

2 个答案:

答案 0 :(得分:5)

通过这个小程序了解你的最大堆栈大小,并检查你的阵列是否更大

#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

局部变量存储在堆栈中,显然,它们不能大于其最大大小

答案 1 :(得分:3)

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);