malloc()之后访问数组时出现突然分段错误

malloc()之后访问数组时出现突然分段错误,c,arrays,malloc,C,Arrays,Malloc,我有一个数组char*Input[11]。我使用malloc()为它分配内存 for(int i = 0; i < 12; i++) Input[i] = "\0"; for(int i = 0; i < 12; i++) { Input[i] = malloc( 256 * sizeof(char) ); } for(int i = 0; i < 12; i++) { st

我有一个数组
char*Input[11]
。我使用
malloc()
为它分配内存

    for(int i = 0; i < 12; i++) 
        Input[i] = "\0";

    for(int i = 0; i < 12; i++)
    {

        Input[i] = malloc( 256 * sizeof(char) );
    }

    for(int i = 0; i < 12; i++)
    {
        strcpy(Input[i], "test");
    }

    printf("Input[11] is %s\n", Input[11]); // <- Here the seg fault happens
然而,除了错误在哪里,我不确定这告诉了我什么。感谢您的帮助


编辑:哦,当简化代码时,忘记初始化

如果一个数组有N个元素,那么有效的索引范围是
[0,N-1]
在代码段中,您声明一个数组有11个元素。因此,数组的有效索引范围是
[0,10]

为了避免像您没有使用幻数这样的错误。取而代之的是为它们取一些名字

您的代码可以通过以下方式重写

#define N 11

//...

char *Input[N] = { 0 };
int length = 256;

for( int i = 0; i < N; i++ )
{
    Input[i] = malloc( length * sizeof( char ) );
}

for ( int i = 0; i < N; i++ ) strcpy( Input[i], "test" );

printf( "Input[N - 1] is %s\n", Input[N - 1] );
定义N 11 //... 字符*输入[N]={0}; 整数长度=256; 对于(int i=0;i将其进一步简化。如何定义
输入
?首先,发布一个,而不是以使人们的答案无效的方式编辑代码。读了这篇文章,我打算对答案发表评论,但它被删除了。我将尝试第二次编辑,看看是否有帮助。当然,我删除了它。它没有回答这个问题。这就是我强调的原因:首先用适当的例子写下你的问题。没有人拿着秒表给你计时,告诉你发帖的速度。@Yíu,这是一个有特定问答格式的网站(你可以阅读和阅读)。Eric Lipperts的帖子举例说明了一个特定品牌的问题,这里经常会问这些问题,但它们并不真正属于我们。你没有问题。你有一个问题,你希望有人帮你解决。Eric准确地指出,在询问之前,你很可能还没有用尽所有的选择。
#define N 11

//...

char *Input[N] = { 0 };
int length = 256;

for( int i = 0; i < N; i++ )
{
    Input[i] = malloc( length * sizeof( char ) );
}

for ( int i = 0; i < N; i++ ) strcpy( Input[i], "test" );

printf( "Input[N - 1] is %s\n", Input[N - 1] );