我在这段代码中一直遇到分段错误:
#include <stdio.h>
void FillArray(int *array, int);
#define MAX 256
int main()
{
int *array[MAX], size = 100;
FillArray(*array, size);
return 0;
}
void FillArray(int *array, int size)
{
int i, temp;
for (i = 0; i < size; i ++)
{
temp = (rand()%101);
*array = temp;
printf ("array[%d]. %d\n", i, *array);
array += i;
}
printf ("AJGIUEROGUSHFDJGJDFK/n");
}
我把printf放在最后一行,这样我就知道它是否会到达那一点,到目前为止还没有。
编辑:我添加了代码。我必须使用指针算法而不是数组索引。
答案 0 :(得分:2)
array
中的main
被声明为int *
指针数组。此数组未初始化,即所有元素都包含垃圾值。
在FillArray
main
来电进行分层
FillArray(*array, size);
将*array
的值传递给FillArray
函数。 *array
与array[0]
相同 - 它是一个未初始化的未初始化垃圾指针。
在FillArray
函数内部,您试图通过未初始化的垃圾指针访问(和写入)数据。预计代码会崩溃。
与无效代码一样,在解释您要执行的操作之前无法修复错误。
我只能猜测你所需要的只是一个int
元素数组,而不是int *
个元素。即array
中的main
应该被声明为int array[MAX]
。 FillArray
应该被称为FillArray(array, size)
。此外,在周期内,它应该是array += 1
(或只是++array
),而不是你的array += i
,这没有任何意义。
答案 1 :(得分:1)
如果要填充传递给您的函数的数组,请更改
array = &temp;
到
*array = temp;
并且还要改变
array += i;
到
array++;
编辑:OP编辑了他的问题并希望填充整数数组。您需要查找数组的声明
int *array[MAX], size = 100; // Declare an array of pointers
到
int array[MAX], size = 100; // Declates an array of ints
答案 2 :(得分:1)
你的循环应该是:
int i, temp;
for (i = 0; i < size; i ++)
{
temp = rand() % 101;
array[i] = temp;
printf ("array[%d] = %d\n", i, array[i]);
}
这将做你想要的。虽然可以,但无需在函数内重新分配array
。使用索引运算符[]
会更容易。请记住
a[i]
与
相同*(a + i)
无论涉及哪种类型(但通常a
是指针类型而i
是无符号整数),只要总和当然是指针。
main()
也有错误:
int array[MAX];
。FillArray(array, size);
。答案 3 :(得分:0)
可能是你想要的。
#include <stdio.h>
#include <stdlib.h>
void FillArray(int *array, int);
#define MAX 256
int main(){
int array[MAX], size = 100;
FillArray(array, size);
return 0;
}
void FillArray(int *array, int size){
int i;
for (i = 0; i < size; i++){
*array = rand()%101;
printf ("array[%d]. %d\n", i, *array);
++array;
}
}
答案 4 :(得分:0)
int *array[MAX]
是一个MAX
指向int
的数组,您可以从第1个函数传递给函数。后面指出的没有int
已定义。
要解决此问题,请修改其他答案提供的更改void FillArray(int *array, int size)
,然后将其称为:
int main(void)
{
int array[MAX], size = 100;
FillArray(array, size);
return 0;
}
答案 5 :(得分:0)
代码很好,除了你认为* array =&amp; array,这是错误的!!
以下几点可能有助于更好地低估指针:
对代码进行了更改,它应该可以正常工作:
#include <stdio.h>
void FillArray(int *array, int);
#define MAX 256
int main()
{
int *array, size = 100;
array=(int *)calloc(MAX,sizeof(int));
if(array !=NULL)
{
FillArray(array, size); /* While calling send &array[0] but not array[0] */
}
return 0;
}
void FillArray(int *array, int size)
{
int i, temp;
for (i = 0; i < size; i ++)
{
temp = (rand()%101);
*(array+i) = temp;
printf ("array[%d]. %d\n", i, *(array+i));
/* array += i; <-- not necessary */
}
printf ("AJGIUEROGUSHFDJGJDFK/n");
}