我在使用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;iFillingMassive(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);