c中的分段故障(核心转储)

6qqygrtg  于 2022-12-22  发布在  其他
关注(0)|答案(1)|浏览(141)

我写了一个C代码,它接受一个整数数组,并给数组中的每个值加1。然而,我得到了一个分段错误。
下面是代码:

#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]);
}

}
zujrkrfu

zujrkrfu1#

我可以在您的计划中确定三个问题,并按严重程度依次列出
1.(代码错误)数组大小与数组对象的大小不同

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

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

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

这意味着数组对象的大小是单个数组元素大小的倒数。
1.(功能错误)将数组传递给函数时,数组退化为指针。

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++){

1.(样式)数组的初始化不需要显式数组大小

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

应该是

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

相关问题