我最近在编码比赛中遇到了这个片段。无法想象这是如何工作的。第二行创建一个指向单个 long long int的指针。
我们如何在for
循环中使用下标?
即使可能,也不会在第二次迭代时引发分段错误?
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]);
}
如何解读此代码段?
答案 0 :(得分:2)
这段代码确实是错误的。它超出范围并写入索引[1]
和[2]
,这些索引不存在。
访问无效数组元素不一定会导致分段错误。它是未定义的行为,意味着任何事情都可能发生(包括崩溃,破坏不相关的数据,或看似没有问题的工作)。
如果您对一般的下标感到困惑:a[b]
只是意味着*(a + b)
。第一次迭代很好,因为ptr[0]
*(ptr + 0)
是*ptr
。