gpt4 book ai didi

c - 增加 C 中的指针导致段错误,即使它在数组大小内

转载 作者:太空宇宙 更新时间:2023-11-04 06:56:16 25 4
gpt4 key购买 nike

#include<stdio.h>
int main(){
int a[12];
for(int i=0;i<12;i++){
a[i]=i*i+1;
}
int *p=a;
for(;p<(p+10);p++){
printf("%d",*p);
}
}

这是返回段错误。如果我在 printf 中使用新行,它会返回垃圾字符,然后返回段错误。我正在使用这个版本的编译器:

配置为:--prefix=/Library/Developer/CommandLineTools/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM 版本 8.1.0 (clang-802.0.42)
目标:x86_64-apple-darwin16.5.0
线程模型:posix
安装目录:/Library/Developer/CommandLineTools/usr/bin

最佳答案

p < (p + 10);不管用。它将永远循环,永远递增 p , 因为每次 p递增,表达式 p + 10 也递增增量。它就像一只试图捕获自己尾部的小猫。

最终p开始指向程序之外的内存,这是非法访问,这就是它崩溃的原因。

您观察到,如果您在 printf 中使用换行符,它会返回垃圾字符,然后段错误是错误的。它返回 12 行,其中包含您预期的确切值,然后是垃圾,然后发生段错误。

如果没有换行符,程序的输出将缓存在内部缓冲区中,等待发出换行符或程序终止,但崩溃发生在发出换行符之前,因此您永远看不到任何输出。

关于c - 增加 C 中的指针导致段错误,即使它在数组大小内,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44082540/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com