簡體   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