【问题标题】:Stack smashing error when manipulating array of ints in function在函数中操作整数数组时出现堆栈粉碎错误
【发布时间】:2018-08-09 02:10:22
【问题描述】:

所以我正在尝试制作一个简单的程序,该程序接受一个部分满的数组,并在开头添加一个整数,将所有现有元素向右移动。似乎我在这里添加并正确地转移了东西,但是一旦所有代码执行,我就会得到一个堆栈粉碎检测错误。

这是我的代码:

#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;
            }
        }   
    }   
}

这是输出:

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

【问题讨论】:

  • 请注意,if (&amp;arr[k] != NULL) 测试几乎毫无意义。只有在神秘的情况下才会如此。代码不符合您的预期。

标签: c arrays function pointers stack


【解决方案1】:
addCommand(list, sizeof(list), 4);

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

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

【讨论】:

    猜你喜欢
    • 2022-07-07
    • 1970-01-01
    • 1970-01-01
    • 2016-04-17
    • 2015-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多