gpt4 book ai didi

c指针数组段错误

转载 作者:太空宇宙 更新时间:2023-11-04 05:42:00 24 4
gpt4 key购买 nike

我刚接触指针,所以有点问题。我有一个简单的程序来输出 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;

}

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

最佳答案

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

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

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

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

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

关于c指针数组段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15867610/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com