0

次のコードは私にsegfaultingです。

#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を忘れました、私はここで愚かなことをしていますか?

4

2 に答える 2

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

ローカル変数はスタックに格納され、明らかに、最大サイズより大きくすることはできません。

于 2013-01-22T10:17:15.247 に答える
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);
于 2013-01-22T10:06:13.520 に答える