【发布时间】:2018-10-25 06:39:16
【问题描述】:
我试图通过引用传递一个数组,并在 changeArray() 中更改数组中的值。我收到一条错误消息,指出“访问冲突写入位置 0x00000001”。我阅读了Changing array inside function in C 并使用了 Ryyker 的答案来实现我的预期结果(获得 x[]={1,1,1,1,1])但我得到了上述错误。这是我的代码:
#include <stdio.h>
#include <stdlib.h>
int changeArray(int **a);
int main(void) {
int *x[5] = { 1,5,4,3,1 };
int *y[5] = { 1,5,4,3,1 };
changeArray(&x);
for (int z = 0; z <= 4; ++z) {
printf_s("%s", x[z]);
}
free(x);
}
int changeArray(int **a) {
for (int z = 0; z < 5; ++z) {
(*a)[z] = 1;
}
}
我知道有类似的帖子,但我看到的所有帖子似乎都没有解决我的问题,感谢任何帮助!
【问题讨论】:
-
int *x[5]应为int x[5](y相同)和int changeArray(int **a)应为int changeArray(int (*a)[5])。 -
去掉 x 和 y 之前的 *。另外,你不应该调用
free(x),因为数组不是堆分配的 -
使用此语句,您将在指针 x[0], x[1] ... int *x[5] = { 1,5, 中填充地址 1,5,4,3,1 4,3,1};它类似于 int *x = 5;这是无效的,最好采用整数类型数组它不是强制变量为指针类型以通过引用调用。
-
您是如何没有获得任何编译器诊断信息的?您的帖子中没有提到没有。请找出编译器输出诊断消息的位置!
-
"Access violation writing location 0x00000001."哎哟!。您正在尝试访问位于 System Reserved 内存池最底部的地址1的内存。不好。
标签: c arrays element pass-by-reference