【发布时间】:2017-01-01 04:40:26
【问题描述】:
我编写了这个小 C 函数来从数组中删除整数。
/* remove `count` integers from `arr`, starting at index `idx` */
void remove_int(int (*arr)[100], int idx, int count)
{
int i, j;
for (i = 0; i < count; i++)
for (j = idx; *arr[j]; j++)
*arr[j] = *arr[j+1];
}
假设我是这样运行的:
int arr[100] = {25, 4, 4, 1, 2, 1, 2};
remove_int(&arr, 7, 2);
我得到一个分段错误。为什么?
【问题讨论】:
-
*arr[j]-->(*arr)[j] -
你的函数没有使用
idx? -
顺便说一句
remove_int(&arr, 7, 2);-->remove_int(&arr, 2, 7);? -
另外你的数组有 7 个整数,从
0-6开始索引,但是你在调用remove_int()时使用7。此外,为什么不改用int arr[] = {25, 4, 4, 1, 2, 1, 2};? -
@RoadRunner
*arr[j]正在寻找 0 - 据说。int arr[] = {25, 4, 4, 1, 2, 1, 2};缺少 0。
标签: c arrays segmentation-fault