C 在函数中操作整数数组时发生堆栈粉碎错误

C 在函数中操作整数数组时发生堆栈粉碎错误,c,arrays,function,pointers,stack,C,Arrays,Function,Pointers,Stack,因此,我试图制作一个简单的程序,它接受一个部分满的数组,并在开始处添加一个整数,将所有现有元素向右移动。我这里的代码似乎可以正确地添加和转换内容,但一旦所有代码都执行了,我就会检测到一个堆栈崩溃错误 这是我的密码: #include <stdio.h> void addCommand(int *, int, int); void main() { int i; int list[10]; list[0] = 1; list[1] = 5;

因此,我试图制作一个简单的程序,它接受一个部分满的数组,并在开始处添加一个整数,将所有现有元素向右移动。我这里的代码似乎可以正确地添加和转换内容,但一旦所有代码都执行了,我就会检测到一个堆栈崩溃错误

这是我的密码:

#include <stdio.h>

void addCommand(int *, int, int);

void main() {
    int i;
    int list[10];
    list[0] = 1;
    list[1] = 5;

    printf("Before add:\n");
    for (i = 0; i < 2; i++) {
        printf("%d\n", list[i]);
    }

    addCommand(list, sizeof(list), 4);

    printf("Adding 4:\n");
    for (i = 0; i < 3; i++) {
        printf("%d\n", list[i]);
    }
}


void addCommand(int *arr, int size, int new) {
    int k;
    printf("%d", arr[0]);   
    for (k = size - 1; k >= 0; k--) {
         if (&arr[k] != NULL) {     
            if (k > 0) {        
                arr[k] = arr[k-1];
            } else {
                arr[k] = new;
            }
        }   
    }   
}
#包括
void addCommand(int*,int,int);
void main(){
int i;
国际清单[10];
列表[0]=1;
列表[1]=5;
printf(“添加前:\n”);
对于(i=0;i<2;i++){
printf(“%d\n”,列表[i]);
}
addCommand(列表,sizeof(列表),4);
printf(“添加4:\n”);
对于(i=0;i<3;i++){
printf(“%d\n”,列表[i]);
}
}
void addCommand(int*arr,int size,int new){
int k;
printf(“%d”,arr[0]);
对于(k=size-1;k>=0;k--){
如果(&arr[k]!=NULL){
如果(k>0){
arr[k]=arr[k-1];
}否则{
arr[k]=新的;
}
}   
}   
}
以下是输出:

如果有人能指出我在这里做错了什么,我将不胜感激

addCommand(list, sizeof(list), 4);
上行未传递列表数组中的元素数。你必须这样做:

sizeof(arr)/sizeof(arr[0])
上行未传递列表数组中的元素数。你必须这样做:

sizeof(arr)/sizeof(arr[0])
请注意,
if(&arr[k]!=NULL)
测试几乎毫无意义。只有在神秘的情况下才是真的。代码没有达到预期效果。请注意,
if(&arr[k]!=NULL)
测试几乎毫无意义。只有在神秘的情况下才是真的。代码没有达到您期望的效果。