写出边界矩阵

问题描述 投票:0回答:1

考试中的练习要求将执行以下程序后内存获得的值写在纸上。问题是,在这个程序中,当 for 循环到达元素 3 时,我们正在访问未分配的内存。写入未分配内存的值是否实际存储或未定义行为,因此不写入它是正确的,因为我们不这样做知道实际发生了什么。遵循计划:

#include <stdio.h>

int main()
{
  int k[5][7] = {0};
  int *p, *z;
 
  p = k[1];
  *p = 12;
 
  for (int i = 0; i < 4; i++){
    z = p + 8;
    *z = *p + 2;
    p = z;
  }

 return 0;
}

运行程序,出现分段错误,但是在考试纠错中,教授仍然分配了未分配内存区域中写入的值。那么,将我们要写入未分配内存的值写在纸上是否正确?

c memory undefined-behavior
1个回答
0
投票

那么将我们要写入未分配内存的值写在纸上是否正确?

由于程序执行了多种未定义的行为,C 语言规范没有为该问题的任何特定答案提供任何理由。

但这并不直接相关,因为是你的教授决定他们接受什么答案。他们可能会接受解释为什么行为未定义的答案,而不是给出所请求的内存布局,但他们更有可能希望您假设一些特定的行为并基于此给出答案。

我不太关心这样的问题,但如果我面对它,那么我可能会做上述所有事情:解释所涉及的未定义行为,然后描述一个特定的、合理的行为选择,以此为基础回答关于记忆结果的内容,然后给出该行为暗示的答案。

© www.soinside.com 2019 - 2024. All rights reserved.