我有一个作业,其中我必须获取一个数组并反转它的顺序。我们应该使用指针来完成此任务,但我的代码的一部分遇到了问题。在第 26 行,我尝试将数组元素重新分配给新值,但当我尝试时,出现访问冲突错误“HW7_JacobS.exe 中 0x00007FF60459600D 处未处理的异常:0xC0000005:访问冲突写入位置 0x0000000000000000。”
#include <stdio.h>
#define SIZE 10
void swap_elements(int *array, size_t size);
int main(void) {
puts("Enter elements of the array and the code will reverse the array.");
int array[SIZE];
for (int i = 0; i < SIZE; i++) {
printf("Enter element %d: ", i);
scanf("%d", &array[i]);
}
puts("Array before reversing:");
for (int i = 0; i < SIZE; i++) {
printf("%5d", array[i]);
} puts("");
swap_elements(*array, SIZE);
}
void swap_elements(int *array, size_t size) {
for (int i = 1; i <= size / 2; i++) {
int *element1Ptr = &array[i - 1];
int *element2Ptr = &array[-1];
int val1 = element1Ptr;
int val2 = element2Ptr;
array[i - 1] = val1; // Here is the problem
array[-i] = val2;
}
puts("Array after reversing:");
for (int i = 0; i < SIZE; i++) {
printf("%5d", array[i]);
}
}
我原本期望代码将 array[i - 1] 重新分配给 val1,但代码却中断并在调试模式下给出此错误。
这是 C 代码,如果您的文件具有
.c
扩展名,您可能会将其编译为 C。 swap_elements(*array, SIZE);
是赠品,*array
的结果是您尝试从指针投射的 int
广告。 C 编译器会告诉你:
prog.c:18:19: warning: passing argument 1 of 'swap_elements'
makes pointer from integer without a cast [-Wint-conversion]
从这里开始,您的代码将导致 UB,例如地址冲突,因为
swap_elements
访问了一些不存在的对象。
在 C++ 中,由于存在多个错误,此代码根本无法编译。
虽然
array[-i]
是正确的语法,但它假设 *(array-i)
是正确的位置,但在您的情况下 array
指向数组的开头。 C 和 C++ 中的负索引与 Python 中的负索引不同。