Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 整数输入';大小未知的数组_C_Arrays_Realloc - Fatal编程技术网

C 整数输入';大小未知的数组

C 整数输入';大小未知的数组,c,arrays,realloc,C,Arrays,Realloc,我正在尝试创建一个未知大小的整数数组。 每次输入一个正元素时,我都使用realloc来增加数组的大小并存储该元素 问题是,当我运行这段代码时,我在函数create1DArray的while的2次迭代后得到一个运行时错误,所以这可能是由于realloc失败。 有谁能告诉我我做错了什么以及如何纠正它? 提前感谢, #include <stdio.h> #include <stdlib.h> void create1DArray(int** perArray, int* siz

我正在尝试创建一个未知大小的整数数组。 每次输入一个正元素时,我都使用realloc来增加数组的大小并存储该元素 问题是,当我运行这段代码时,我在函数create1DArray的while的2次迭代后得到一个运行时错误,所以这可能是由于realloc失败。 有谁能告诉我我做错了什么以及如何纠正它? 提前感谢,

#include <stdio.h>
#include <stdlib.h>
void create1DArray(int** perArray, int* size);


int main()
{
    int *perArray, size=0, i;
    create1DArray(&perArray, &size );


    for(i=0; i<size; i++)
        printf("%d ",perArray[i]);
    free(perArray);
    return 0;
}


void create1DArray(int** perArray, int* size)
{
    int flag=0, i=0, x;
    *perArray=(int*)malloc(sizeof(int) );
    if(*perArray==NULL)
    {
        printf("Allocation failed!");
        exit(1);
    }
    while(!flag)
    {
        if( scanf("%d", &x)<1 || (x<0) )
        {
            printf("Invalid input!");
            free(perArray);
            exit(1);
        }

        if(!x)
        {
            if( !(*size) )
            {
                printf("The first element of the array must not be 0");
                free(perArray);
                exit(1);
            }
            flag++;
        }

        else
        {

            *perArray=(int*)realloc(*perArray, (++(*size))*sizeof(int) );
            if(*perArray==NULL)
            {
                printf("Reallocation failed!");
                free(perArray);
                exit(1);
            }
            *perArray[i++]=x;
        }

    }
}
#包括
#包括
void create1DArray(int**perArray,int*size);
int main()
{
int*perArray,大小=0,i;
创建1dArray(&perArray,&size);

for(i=0;i可能不完全是您想要的,但请看一下如何简洁地完成它(尽管在每次迭代中执行realloc是低效的)。它应该使用标志std=c11进行编译

#包括
#包括
#包括
int main()
{
int size=0;
int输入=0;
int*perArray=NULL;
while(scanf(“%d”,&input)和&input>0)
{
++大小;
perArray=(int*)realloc(perArray,sizeof(int)*(长无符号)大小);
断言(perArray);
perArray[大小-1]=输入;
}
如果(perArray)
{   
对于(int i=0;i
我想我看到了两个问题(而且M Oehm又发现了一个):

1) 你对尺寸的处理是错误的(或者至少是奇怪的)。通常你会这样做:

*perArray=(int*)malloc(sizeof(int) );
*size = 1;
也许更好-您应该删除
malloc
,只需将
main
中的指针初始化为NULL。
realloc
在使用NULL调用时与
malloc
类似

这还允许您多次调用该函数—这是当前代码不允许的

2) 您的
realloc

        *perArray=(int*)realloc(perArray, (++(*size))*sizeof(int) );
                                ^^^^
                      Should be *perArray
3) 您需要在索引之前取消对指针的引用(Moehm注意到了,谢谢)


我将perArray更改为*perArray,删除了malloc并在main中将*perArray初始化为NULL。它在运行时仍然会崩溃。还有第三个错误:
*perArray[I++]=x;
应该是
(*perArray)[I++]=x;
        *perArray=(int*)realloc(perArray, (++(*size))*sizeof(int) );
                                ^^^^
                      Should be *perArray
*perArray[i++]=x; ---> (*perArray)[i++]=x;