#include <stdlib.h>
#include <stdio.h>
#include <ctime> // For time functions
#include <math.h> // For pow()
#include <iostream>
using namespace std;
int main()
{
int jiff=50;
int sizes[jiff]; //array of size jiff
sizes[49]=50; //existing, should be last position
sizes[55]=4; //should not exist
printf("it is %d\n", sizes[49]);
printf("it is %d",sizes[55]);
}
输出:
it is 50
it is 4
为什么我的代码没有崩溃? sizes [55]应该超出范围,并且应该在运行时崩溃。是什么给了什么?
编辑:没关系,它现在有时会崩溃,或者它会打印出模糊不清的大数字。我的新问题:为什么之前没有行为不端?我的前5次运行对于任何阵列位置都是完美的,直到60答案 0 :(得分:1)
访问未分配给您的内存会导致未定义的行为。有时,它可能会打印出位于该内存地址的任何内容,有时它可能会给您一个分段错误。有关常见未定义行为的列表,请参阅this question
答案 1 :(得分:1)
你是正确的,它是出界的,但它不一定会崩溃(虽然这是一个明显的可能性)。
当你执行sizes[55]=4;
时,它会很乐意将4写入阵列末尾5个内存位置
但那是谁的记忆?它可能是您代码的另一部分,它代码是另一个应用程序的代码。如果它是另一个应用程序的代码,它可能会立即崩溃。如果它是您自己的代码,它可能会导致您的代码崩溃,并且很难调试与这段代码无关的方式。
请放心,即使它似乎没有引起问题,但它会在以后再次困扰你。