繁体   English   中英

c中的分段错误(核心转储)

[英]Segmentation fault (core dumped) in c

我一直在编写一个ac代码,它接受一个整数数组并在数组中添加1个但是我有一个分段错误。我刚接触C并且不知道是什么导致这个错误这是代码:

#include <stdio.h>
void add1(int a[]){
    int i;
    for(i=0;i<sizeof(a);i++){
a[i]=a[i]+1;
    }
}


void main(){
    int arr[10]={1,2,3,4,5,76,7,5,3};
    add1(arr);
int i;
for(i=0;i<sizeof(arr);i++){
arr[i]=arr[i]+1;
printf("%d ",arr[i]);
}


}

我可以在您的程序中识别出三个问题,并将其列入严重程度

  1. (代码错误)数组大小与数组对象的大小不同

     for(i=0;i<sizeof(arr);i++) 

    你假设sizeof会返回数组大小(没有元素)是错误的。 sizeof用于计算数据类型的大小,在本例中是一个大小为10的整数数组。

    你应该做的

     for(i=0;i<sizeof(arr)/sizeof(arr[0]);i++) 

    这意味着,数组对象的大小是单个数组元素的大小的倒数。

  2. (功能错误)将数组传递给函数时,数组会退化为指针。

     void add1(int a[]){ int i; for(i=0;i<sizeof(a);i++){ 

    因此, sizeof将返回整数指针的大小而不是数组的大小。 您应该将数组大小作为附加参数传递

     void add1(int a[], size_t sz){ int i; for(i=0;i < sz;i++){ 
  3. (样式)数组的初始化不需要显式数组大小

     int arr[10]={1,2,3,4,5,76,7,5,3}; 

    应该

     int arr[]={1,2,3,4,5,76,7,5,3}; 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM