【问题标题】:Accessing pointer to long long int with subscript使用下标访问指向 long long int 的指针
【发布时间】:2017-10-29 14:17:20
【问题描述】:

我最近在一次编码比赛中遇到了这个 sn-p。无法弄清楚这是如何工作的。第二行创建一个指向 single long long int 的指针。

  1. 我们如何在for 循环中使用下标?

  2. 即使有可能,它不会在第二次迭代时引发分段错误吗?

int Q = 3;
long long *queryArray = (long long*)malloc(sizeof(long long));

for(i_queryArray = 0; i_queryArray < Q; i_queryArray++){
    scanf("%lld", &queryArray[i_queryArray]);
}

如何解释这个sn-p?

【问题讨论】:

  • 内存永远不会被访问
  • 代码访问越界。那是未定义的行为。任何事情都可能发生,包括它似乎有效。
  • 这里有什么问题?投反对票!
  • 1.如果我们避免未定义的行为,我们就做不到。 2. 可能。没有任何保证。

标签: c pointers memory-management


【解决方案1】:

这段代码确实是错误的。它超出范围并写入不存在的索引[1][2]

访问无效的数组元素不一定会导致分段错误。这是未定义的行为,意味着任何事情都可能发生(包括崩溃、损坏无关数据或看似正常工作)。

如果您对一般下标感到困惑:a[b] 仅表示 *(a + b)。第一次迭代很好,因为 ptr[0]*(ptr + 0)*ptr

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-02
    • 1970-01-01
    • 2015-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-27
    • 2023-03-31
    相关资源
    最近更新 更多