c指针数组segfault错误

时间:2013-04-07 20:46:20

标签: c pointers

我是新手指针所以我有点问题。我有一个简单的程序来打印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;

}

我真的不确定为什么,任何帮助。谢谢:))

2 个答案:

答案 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));