【发布时间】: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 (&arr[k] != NULL)测试几乎毫无意义。只有在神秘的情况下才会如此。代码不符合您的预期。
标签: c arrays function pointers stack