我在使用C语言时遇到了一些问题(只有C语言,没有C+;+;)

我在使用C语言时遇到了一些问题(只有C语言,没有C+;+;),c,dynamic,C,Dynamic,我必须制作一个程序,把正数从第一个复制到第二个。用静态体量我可以做到,但用动态记忆我有一些麻烦。它不起作用。主要错误是在我的体量中“使用未初始化内存”,但我认为主函数中存在更多问题。谁能帮帮我吗 以下是原始代码: int GetOutOfPos(int* arr, const unsigned int count) { if (!arr) { return -1; } int size2 = 0; for (unsigned int i

我必须制作一个程序,把正数从第一个复制到第二个。用静态体量我可以做到,但用动态记忆我有一些麻烦。它不起作用。主要错误是在我的体量中“使用未初始化内存”,但我认为主函数中存在更多问题。谁能帮帮我吗

以下是原始代码:

int GetOutOfPos(int* arr, const unsigned int count)
{
    if (!arr)
    {
        return -1;
    }

    int size2 = 0;

    for (unsigned int i = 0; i < count; ++i) {
        if (arr[i] >= 0) 
        {
            size2++;
        }
    }

    return size2;
}


void FillingMassive(unsigned int count,int* arr) 
{
    for (unsigned int i = 0; i < count; i++)
    {
        arr[i] = rand() % 201 - 100;
    }

}

int Memory(int* arr, int* arr2,int size2, const unsigned int count)
{
    arr = (int*)malloc(sizeof(int) * count);
    arr2 = (int*)malloc(sizeof(int) * size2);

}


void CopPosNum(int* arr, const unsigned int count, int size2, int* arr2)
{
    for (unsigned int i = 0; i < count; i++)
    {
        if (arr[i]>0)
            for (int j = 0; j < size2; j++)
            {
                arr2[j] = arr[i];
            }
    }
}

int main()
{

    srand(time(NULL));
    int* arr, *arr2;
    int size2 = 0;
    unsigned int count;
    printf("Set massive size: ");
    scanf_s("%i", &count);
    FillingMassive(count, arr);
    GetOutOfPos(arr, count);
    Memory(arr,arr2,size2,count);
    CopPosNum(arr, count, size2,arr2);
    for (unsigned int i = 0; i < count; i++)
        printf("%i\n",arr[i] );
    system("pause");
    for (int i = 0; i < size2; i++)
        printf("%i\n", arr2[i]);

    return 0;
}
int GetOutOfPos(int*arr,const unsigned int count)
{
如果(!arr)
{
返回-1;
}
int size2=0;
for(无符号整数i=0;i=0)
{
size2++;
}
}
返回大小2;
}
void fillingmassible(无符号整数计数,整数*arr)
{
for(无符号整数i=0;i0)
对于(int j=0;j
我更改了一些代码,所以我现在有:

int GetOutOfPos(int* arr, const unsigned int count)
{
    if (!arr)
    {
        return -1;
    }

    int size2 = 0;

    for (unsigned int i = 0; i < count; ++i) {
        if (arr[i] >= 0) 
        {

            size2++;
        }
    }

    return size2;
}


void FillingMassive(unsigned int count,int* arr) 
{
    for (unsigned int i = 0; i < count; i++)
    {
        arr[i] = rand() % 201 - 100;
    }

}


/*int Average(int* arr, int* arr2,int size2, const unsigned int count)
{
    int Av1, Av2, s1 = 0, s2 = 0;

    for (int i = 0; i < count; i++)
    {
        s1 += arr[i];
    }
    Av1 = s1 / count;

    for (int i = 0; i < size2; i++)
    {
        s2 += arr2[i];
    }
    Av2 = s2 / size2;
    return Av1, Av2;

}
*/

void CopPosNum(int* arr, const unsigned int count, int size2, int* arr2)
{
    int k = 0;
    for (unsigned int i = 0; i < count; i++)
    {
        if (arr[i] > 0)
        {

            arr2[k] = arr[i];
            k++;
            //printf("%i\n",arr2[i]);

        }
    }
}

int main()
{

    srand(time(NULL));

    int* arr, *arr2;
    int size2 = 0;
    unsigned int count;

    printf("Set massive size: ");
    scanf_s("%i", &count);


    arr = (int*)malloc(sizeof(*arr) * count * 8);

    FillingMassive(count, arr);

    size2 = GetOutOfPos(arr, count);

    arr2 = (int*)malloc(sizeof(*arr2) * size2 * 4);

    CopPosNum(arr, count, size2,arr2);


    double Av1, Av2,s1 = 0, s2 = 0;

    for (int i = 0; i < count; i++)
    {
        s1 += arr[i];
    }
    Av1 = s1 / count;

    for (int i = 0; i <= size2-1; i++)
    {
        s2 += arr2[i];
    }
    Av2 = s2 / size2;



    printf("Average of first massive is: %.2f\n", Av1);
    printf("Average of second massive is: %.2f\n", Av2);

    for (unsigned int i = 0; i <= count-1; i++)
        printf("%i\n",arr[i] );
    system("pause");
    for (int i = 0; i < size2; i++)
    {
        printf("%i\n", arr2[i]);
    }

    return 0;
}
int GetOutOfPos(int*arr,const unsigned int count)
{
如果(!arr)
{
返回-1;
}
int size2=0;
for(无符号整数i=0;i=0)
{
size2++;
}
}
返回大小2;
}
void fillingmassible(无符号整数计数,整数*arr)
{
for(无符号整数i=0;i0)
{
arr2[k]=arr[i];
k++;
//printf(“%i\n”,arr2[i]);
}
}
}
int main()
{
srand(时间(空));
int*arr,*arr2;
int size2=0;
无符号整数计数;
printf(“设置大尺寸:”);
扫描单位(“%i”和计数);
arr=(int*)malloc(sizeof(*arr)*计数*8);
填充大量(计数、arr);
size2=GetOutOfPos(arr,count);
arr2=(int*)malloc(sizeof(*arr2)*size2*4);
CopPosNum(arr,count,size2,arr2);
双Av1,Av2,s1=0,s2=0;
for(int i=0;i对于(int i=0;i
FillingMassive(count,arr);
此时您的
arr
未分配。我知道,但如何修复它?
scanf_s(“%i”,&count);arr=malloc(count*sizeof*arr);
此外,您的
内存()
没有达到您可能期望的效果。您需要在此处传递指向指针的指针。请注意,
GetOutOfPos
中的
size2
main
中的
size2
不同。因此对
GetOutOfPos
的调用不会为
main
中的
size2
指定值。要解决此问题,您需要assig在
main
,即
size2=GetOutOfPos(arr,count);