在函数中操作int的数组时堆栈粉碎错误

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在函数中操作int的数组时堆栈粉碎错误相关的知识,希望对你有一定的参考价值。

因此,我正在尝试创建一个简单的程序,该程序采用部分已满的数组,并在开头添加一个整数,将所有现有元素向右移动。看起来我在这里添加并正确地移动了一些东西,但是一旦所有代码执行完毕,我就会得到一个堆栈粉碎检测到的错误。

这是我的代码:

#include <stdio.h>

void addCommand(int *, int, int);

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

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

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

    printf("Adding 4:
");
    for (i = 0; i < 3; i++) {
        printf("%d
", 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;
            }
        }   
    }   
}

这是输出:

enter image description here

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

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

上面的行不传递列表数组中的元素数。你必须做这样的事情:

sizeof(arr)/sizeof(arr[0])

以上是关于在函数中操作int的数组时堆栈粉碎错误的主要内容,如果未能解决你的问题,请参考以下文章

在有足够空间的情况下加载到数组会导致堆栈粉碎?

代码在我的系统上运行良好,但是当我将它提交给应该检查它的机器人时会导致堆栈粉碎错误

使用 c++ 偶尔检测到 *** 堆栈粉碎***

在程序结束时检测到堆栈粉碎

Java Interposer 中的堆栈粉碎

gcc 的 -fstack-protector 选项如何防止堆栈粉碎?