0

我是指针新手,所以我有点问题。我有一个简单的程序来打印 0-100 之间的随机 int 值。但它只打印第一个值,然后我得到一个分段错误(核心转储)

#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;

}

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

4

2 回答 2

4

您正在看到运算符优先级的影响。operator[]来之前operator*。因此,您需要将其放在括号中:

printf("index[%d] = %i \n",i,(*array)[i]);

实际上,它需要索引 0,您的数组,并取消引用指针以获取第一个元素,然后移动到下一个数组(它不存在),取消引用该指针,然后 BOOM!未定义的行为。

onon15 是第一位的,但您的数组实际上并不是一个数组。它是单个元素(因为sizeof(size)恰好与sizeof(*array)此处相同)。你想要这样的东西:

int *array = malloc(sizeof(int) * size); 
于 2013-04-07T20:48:26.593 回答
2
int *array = (int *) malloc (sizeof(size));

大小是整数。所以 sizeof(size) 是一个整数的大小,而不是 10 个整数的数组。你可能打算做

int *array = (int *) malloc (size * sizeof(int));

或者更好,

int *array = (int *) calloc(size, sizeof(int));
于 2013-04-07T20:50:30.867 回答