【问题标题】:C - 'malloc' doesn't seem to work correctly [duplicate]C-“malloc”似乎无法正常工作[重复]
【发布时间】:2013-09-23 22:13:19
【问题描述】:
#include <stdio.h>
#include <string.h>

int main()
{
   int *arr = NULL;
   arr = (int *) malloc(1*sizeof(int));
   arr[0] = 4;
   arr[1] = 2;
   printf("%d%d\n", arr[0], arr[1]);
   system("PAUSE");
   return 0;
}

为什么返回 42? malloc 的大小不是只使一个整数可用于
存储吗? (当我尝试 arr[1] 时不应该抛出错误吗?)

我使用的是 Win7 32 位

【问题讨论】:

  • 未定义。您只是在访问一些随机内存空间并作为整数读取。它不一定会抛出错误,但通常会给你一些奇怪的结果。

标签: c pointers memory-management malloc


【解决方案1】:

当我尝试 arr[1] 时,它不是应该通过错误

不是必须,但可能。这就是 C 中未定义行为的美妙之处,不知道会发生什么。

【讨论】:

    【解决方案2】:

    您的程序会导致未定义的行为,因此任何事情都可能发生,包括正确行为的出现。您只是覆盖了您请求的内存的末尾。在那之后,所有的赌注都被取消了。您可能什么都没有覆盖,或者可能是一些 malloc 簿记数据,或者谁知道呢。只是不要那样做。

    【讨论】:

    • 我尝试这样做是为了了解 malloc 函数,而不是将其用于“真实”。
    • 不幸的是,您尝试过的代码不会教给您任何有用的东西。未定义的行为是一个危险的地方。
    猜你喜欢
    • 2012-09-10
    • 1970-01-01
    • 2021-12-12
    • 1970-01-01
    • 2017-09-04
    • 2012-05-06
    • 2013-02-17
    • 2017-10-09
    • 2017-08-03
    相关资源
    最近更新 更多