C_(visual)_Debug Error_运行时检查失败#2 -S

时间:2016-06-29 02:39:35

标签: c arrays

我想要反转数组的数量, 但我无法理解为什么它没有运行。

感谢您解释Debug Error_ Run-Time Check Failure #2 -S的意思..

谢谢,

#include <stdio.h>

int main()
{
    int arr[] = { 1,2,3,4,5 };
    int size, i, j;
    int temp = 0;
    size = sizeof(arr) / sizeof(arr[0]); //use this for changing size
    printf("first_array :");
    for (i = 0; i < size; i++)
    {
        printf("%d", arr[i]);
    }
    printf("\n");
    for (i = 0; i <= (size / 2); i++)
    {
        j = size - i;
        temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }
    printf("Riv_array :");
    for (i = 0; i < size; i++)
    {
        printf("%d", arr[i]);
    }

    return 0;
}

1 个答案:

答案 0 :(得分:0)

数组索引从C中的0开始,你的数组有5个元素,所以arr [4]是你的代码的最后一个元素:

j = size - i;
arr[j];

i=0访问arr [5]时,这是您的代码错误:数组索引超出范围

您应该使用j = size - i-1;指向数组的最后一个元素,而不是j = size - i; 请参阅此工作示例(您的示例代码包含一些编辑):

#include <stdio.h>
int main()
{
    int arr[] = { 1, 2, 3, 4, 5 };
    int size, i, j;
    int temp = 0;
    size = sizeof(arr) / sizeof(arr[0]); //use this for changing size
    printf("first_array :");
    for (i = 0; i < size; i++)
    {
        printf("%d ", arr[i]);
    }
    printf("\n");
    for (i = 0; i <= (size / 2); i++)
    {
        j = size - i - 1;
        temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }
    printf("Riv_array :");
    for (i = 0; i < size; i++)
    {
        printf("%d ", arr[i]);
    }

    return 0;
}

使用指针反转数组的另一种方法:

#include <stdio.h>
void reverse(int* p, int count){
    int temp;
    int* q = p + count - 1; // point to the end
    count /= 2;
    while (count--) {
        temp = *p;
        *p++ = *q;
        *q-- = temp;
    }
}
void print_array(int *p, int count){
    while (count--) printf("%d ", *p++);
    printf("\n");
}
int main()
{
    int arr[] = { 1, 2, 3, 4, 5 };
    int count = ((&arr)[1] - arr);
    print_array(arr, count); 
    reverse(arr, count);
    print_array(arr, count);
    return 0;
}

输出:

1 2 3 4 5
5 4 3 2 1