我是新手指针所以我有点问题。我有一个简单的程序来打印0-100之间的随机int值。但它只打印第一个值,然后我得到一个Segmentation故障(核心转储)
#include <stdio.h>
#include <stdlib.h>
void printArray(int **array, int size)
{
int i;
for (i=0; i<size; i++)
{
printf("index[%d] = %i \n",i,*array[i]);
}
}
int main()
{
int size = 10;
int *array = (int *) malloc (sizeof(size));
int i;
for (i=0; i<size; i++)
{
array[i] = rand() % 100 + 1;
}
printArray(&array,size);
free(array);
return 0;
}
我真的不确定为什么,任何帮助。谢谢:))
答案 0 :(得分:4)
您正在看到运算符优先级的影响。 operator[]
出现在operator*
之前。因此,您需要将其放在括号中:
printf("index[%d] = %i \n",i,(*array)[i]);
实际上,它需要索引0,你的数组,并取消引用指针以获取第一个元素,然后移动到下一个数组(它不存在),取消引用指针和BOOM!未定义的行为。
积分作为第一个来到onon15,但你的数组实际上并不是一个数组。它是一个单独的元素(因为sizeof(size)
恰好与此处的sizeof(*array)
相同)。你想要这样的东西:
int *array = malloc(sizeof(int) * size);
答案 1 :(得分:2)
int *array = (int *) malloc (sizeof(size));
size是int。因此sizeof(size)是一个int的大小,而不是10个int的数组。你可能打算做
int *array = (int *) malloc (size * sizeof(int));
或更好,
int *array = (int *) calloc(size, sizeof(int));