c - 指针中的分段错误
问题描述
我试图比较“数组”和“指针作为数组”。当我分别运行 part1 和 part2 时,它们执行得很好,但是当我运行整个代码时,我得到了分段错误。
#include<stdio.h>
int main(){
int *p;
int arr[5],i,var;
//PART-1
p=&var;
for(i=0;i<5;i++){
*(p+i)=i+1;
}
printf("\n\nPointers: ");
for(i=0;i<5;i++){
printf("%d ",*(p+i));
}
//PART-2
for(i=0;i<5;i++){
arr[i]=i+1;
}
printf("Array: ");
for(i=0;i<5;i++){
printf("%d ",arr[i]);
}
return 0;
}
此代码运行良好:
#include <stdio.h>
int main()
{
int *p;
int arr[5],i,var;
p=&var;
for(i=0;i<5;i++){
*(p+i)=i+1;
}
printf("\n\nPointers: ");
for(i=0;i<5;i++){
printf("%d ",*(p+i));
}
return 0;
}
解决方案
您的代码调用未定义的行为:
p=&var;
for(i=0;i<5;i++){
*(p+i)=i+1;
您的指针指向单个整数变量的地址。不允许访问除此之外的任何内存。
*(p+i)
不允许访问任何碰巧位于的位置。此外,它没有被初始化为指针并且取消引用它是未定义行为的另一个来源。这两种访问都可能导致您的分段错误。
与所有 UB 一样,它可能会立即崩溃,也可能不会。这就是为什么 runnign 两个部分在看似单独工作时会崩溃。
推荐阅读
- html - 水平对齐浮动项目 - 宽度问题
- reactjs - TypeError:无法读取未定义的属性“javascript”+ terser webpack 插件+ react js
- python - 将单元格中的键值对提取到新列中
- apache-flink - 如何在 flink 1.11 中使用 s3a 配置自定义端口到文件系统
- regex - Rust 程序中的正则表达式
- python - 如何从 GCS 存储桶加载 TensorFlow 模型
- javascript - 从 Axios 获取调用更新后 DataTable 变形
- python-3.x - 为什么字典元素不能与 python 中的 max 函数一起使用?
- caching - 深度缓存层次结构中的内存访问时间
- .net - Azure 功能无法访问托管在内部 windows 服务器中的 WCF 服务