C 使用下标访问长整型的指针
我最近在一次编码竞赛中偶然发现了这段代码。我想不出这是怎么回事。第二行创建指向单个长整型的指针C 使用下标访问长整型的指针,c,pointers,memory-management,C,Pointers,Memory Management,我最近在一次编码竞赛中偶然发现了这段代码。我想不出这是怎么回事。第二行创建指向单个长整型的指针 我们如何在for循环中使用下标 即使这是可能的,它在第二次迭代时不会引起分段错误吗 intq=3; long long*queryArray=(long long*)malloc(sizeof(long long)); 对于(i_queryArray=0;i_queryArray
for
循环中使用下标intq=3;
long long*queryArray=(long long*)malloc(sizeof(long long));
对于(i_queryArray=0;i_queryArray
如何解释这段代码?这段代码确实是错误的。它越界并写入不存在的索引
[1]
和[2]
访问无效数组元素不一定会导致分段错误。这是一种未定义的行为,意味着任何事情都可能发生(包括崩溃、损坏不相关的数据,或者看似正常工作)
如果你对一般的订阅感到困惑:
a[b]
只是指*(a+b)
。第一次迭代很好,因为ptr[0]
是*(ptr+0)
是*ptr
内存永远不会被访问代码访问超出范围。这是未定义的行为。任何事情都可能发生,包括它似乎起作用。这里出了什么问题?否决票!1.如果我们避免未定义的行为,我们就不能。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]);
}