[英]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]);
}
}
我可以在您的程序中識別出三個問題,並將其列入嚴重程度
(代碼錯誤)數組大小與數組對象的大小不同
for(i=0;i<sizeof(arr);i++)
你假設sizeof會返回數組大小(沒有元素)是錯誤的。 sizeof用於計算數據類型的大小,在本例中是一個大小為10的整數數組。
你應該做的
for(i=0;i<sizeof(arr)/sizeof(arr[0]);i++)
這意味着,數組對象的大小是單個數組元素的大小的倒數。
(功能錯誤)將數組傳遞給函數時,數組會退化為指針。
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++){
(樣式)數組的初始化不需要顯式數組大小
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.