c.分段故障(堆芯倾倒)



我一直在写一个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]);
}

}

我可以确定您的程序中的三个问题,并在严重程度的进展中列出它们

  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};
    

相关内容

  • 没有找到相关文章

最新更新