使用malloc给了我比预期更多的内存?

Asp*_*bie 2 c memory arrays malloc dynamic

我正试图掌握malloc,到目前为止,我在测试和玩它时大多数都会得到意想不到的结果.

int main(int argc, char** argv)
{
    int size = 10;
    int *A;
    A = (int *)malloc(size * sizeof(int));
    for (int i = 0; i < 10000; i++)
    {
        A[i] = i;
    }
    for (int i = 0; i < 10000; i++)
    {
        printf("%d) %d\n", i, A[i]);
    }
}
Run Code Online (Sandbox Code Playgroud)

以上面的示例代码为例,代码运行时没有错误.即使我只分配A了10*int,所以我预计循环只会在遇到错误之前运行10次.如果我将循环增加到大约30-40k,那么它会遇到分段错误.但是,如果我将我的大小增加到循环量,它将始终像预期的那样工作.所以我知道如何避免这个错误..有点,我只是希望有人可以帮助解释为什么会这样.

编辑:原来我没有意识到C没有检测到越界,我被Java和C++一直照顾得太多了.我有不明确的行为,现在知道我的工作是防止它们.感谢所有回复的人.

dbu*_*ush 9

C不需要对数组访问执行任何边界检查.它可以允许您在没有任何警告或错误的情况下读/写.

您通过读取和写入已分配内存的末尾来调用未定义的行为.这意味着无法预测程序的行为.它可能会崩溃,它可能会输出奇怪的结果,或者它可能(如你的情况)似乎正常工作.

仅仅因为程序崩溃并不意味着它会.

  • @ChrisRafferty正确.你需要自己跟踪大小并确保你不做你不应该做的事情. (2认同)