分段错误:我对数组大小使用malloc是否正确?

分段错误:我对数组大小使用malloc是否正确?,c,pointers,segmentation-fault,malloc,C,Pointers,Segmentation Fault,Malloc,所以我一直在写一个程序,要求用户输入不同的信息 然后,它使用malloc在主函数外部创建一个数组,根据用户输入分配内存 然后用随机生成的数字填充数组(这部分实际上是有效的,我在一个较小的程序中进行了测试) 编译程序时,我会收到这些警告 m0.c:40:15:警告:整数到指针的转换不兼容 将“int”传递给的参数 键入“int*”;删除*[-Wint转换] fillArray(数组、数组长度、下限、上限); ^~m0.c:18:20:注意:将参数传递给参数int fillArray(int[],i

所以我一直在写一个程序,要求用户输入不同的信息

然后,它使用malloc在主函数外部创建一个数组,根据用户输入分配内存

然后用随机生成的数字填充数组(这部分实际上是有效的,我在一个较小的程序中进行了测试)

编译程序时,我会收到这些警告

m0.c:40:15:警告:整数到指针的转换不兼容 将“int”传递给的参数 键入“int*”;删除*[-Wint转换] fillArray(数组、数组长度、下限、上限); ^~m0.c:18:20:注意:将参数传递给参数int fillArray(int[],int,int,int,int)

^m0.c:41:19:警告:将“int”传递给的参数的整数到指针转换不兼容 键入“int*”;删除*[-Wint转换] 搜索单元编号(数组、数组长度); ^~m0.c:21:25:注意:将参数传递给此处的参数void search_number(int,int); ^

与第40行相关
fillArray(*数组,数组长度,下限,上限);
和 第41行`搜索编号(*数组,数组长度)

我不理解警告,以前使用数组作为*数组的模式是有效的(我创建了另一个程序,由于变量被声明为
const
,因此没有输入或内存分配)

这是启动时的样子:

您想要多少个值

十二,

随机数的下限:

二十

随机数的上限:

三十三 分段错误:11

我研究了分段错误的定义,它一定与错误的内存分配有关

我也可能使用了错误的指针,但我不理解错误的来源,因为我以前在代码中使用过类似的语法

这就是我为数组分配内存的方式(使用先前定义的用户输入作为参数)

int* init_array(int arraylength)
{
    int *array = malloc ((arraylength) * (sizeof (int)));

    return array;
}

由于
MAX_INT
被声明为一个固定的
#define
变量,这在以前是没有问题的,这段代码

void search_number (int* array)
{

    int number = input ();
    int counter = 0;
    output(array);
    for (int i=0; i<MAX_INT; i++)
    {
        if ((*(array+i))==number)
            {
               counter++;
            }
    }
    printf ("\nThe number %d occurs %d times.", number, counter);
}
void搜索\u编号(int*数组)
{
int number=input();
int计数器=0;
输出(阵列);

对于(int i=0;i请更容易地格式化错误消息。问题不在您发布的函数中。问题在于调用
fillArray
search\u number
的代码中。第一个参数应该是
array
,而不是
*array
*array
返回“array”的第一个元素的值“。因此,
*array
的类型是
int
。另一方面,你的函数采用
int*
,因此传递
array
,而不是
*array
for(int i=0;我不使用
*(array+i)
。只使用
array[i]
。它们是等价的。这就是
[]
语法存在。此外,由于收到警告,您不应该尝试运行代码。这可能不起作用。请先修复警告。编译器会直接指向这些警告。这就是您需要发布的内容。