C_(视觉)_调试错误_运行时检查失败#2 -S

标签 c arrays

我想反转数组的数字, 但我不明白为什么它没有运行。

感谢您解释调试错误_运行时检查失败#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;
}

最佳答案

在 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

关于C_(视觉)_调试错误_运行时检查失败#2 -S,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38089452/

相关文章:

Ruby:数组的 attr_reader 类能够提供对数组值的写访问权限吗?

ios - 如何使用 NSAtrribulatedString 在 UITextVIew 中突出显示多种颜色的单词?

c++ - K&R 样式函数定义使用 g++ 编译

指向结构的指针的 C typedef

c - 如何跟踪二分搜索算法中的最后一个索引?

PHP 减去数组值

Python - 将多个相同维度的二维数组合并为一个二维数组

C - 当程序读取文件时,不会注意到对文本文件所做的更改

c++ - 将 int 转换为 int 指针地址

javascript - 如何使用 Angular js 将对象数组通过 Web api 传递到 List<>