gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 08:42:03 24 4
gpt4 key购买 nike

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

关于c - c中的段错误(核心转储),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23159382/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com