gpt4 book ai didi

c++ - 无法获取输出 union 集

转载 作者:行者123 更新时间:2023-11-30 20:27:55 25 4
gpt4 key购买 nike

实际上这是一个纯C程序。当我用Xcode编译时。没有错误。但仍然无法得到输出,除非你强行停止,否则进程不会停止。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int LocateElem(int *p1,int e,int leng1);
void Display(int max, int array[]);
int GetElem(int * p, int pass);
int Union(int *p1,int *p2, int leng1, int leng2);
int ListInsert(int **p, int e, int lengA);
int* GetData(int* pArray, int Array_size);
void Show(int *p, int leng);

void InitList_Sq(int *L);
int *p_A,*p_B;
int m,n;

int main()
{
clock_t begin, end;
double cost;
begin = clock();


printf("How many elements of A u want:");
scanf("%d",&m);
if (m<0) {
printf("Error!");
return 0;
}
printf("How many elements of B u want:");
scanf("%d",&n);
if (n<0) {
printf("Error!");
return 0;
}

p_A=(int *)malloc(m*sizeof(int));
p_B=(int *)malloc(n*sizeof(int));
if (p_A==NULL) {
printf("Error allocating memory!\n"); //print an error message
return 0; //return with failure
}
if (p_B==NULL) {
printf("Error allocating memory!\n"); //print an error message
return 0; //return with failure
}

int *pLast_A, * pLast_B;
printf("Array A is :\n");
pLast_A=GetData(p_A, m);
printf("\nArray B is :\n");
pLast_B=GetData(p_B, n);

int newLeng;
newLeng=Union(p_A,p_B,m,n);

printf("\nThe Union set is :\n");
Show(p_A, newLeng);

free(p_A);
free(p_B);
end = clock();
cost = (double)(end - begin) / CLOCKS_PER_SEC;
printf("\n%lf seconds", cost);
return 1;


}


int* GetData(int* pArray, int Array_size){
int* pFill= pArray;
int count;
srand((unsigned) time(NULL));
for ( count=0; count< Array_size; count++) {
*(pFill+count)=rand()%1000;
printf("%d\t", * (pFill+count));
}
return pFill+count-1;
}


int Union(int *p1,int *p2, int leng1, int leng2){
for (int count=0; count<leng2; count++) {
int e=GetElem(p2, count);
while(LocateElem(p1, e, leng1)==0){
leng1=ListInsert(&p1, e, leng1);
}
}
return leng1;
}

int GetElem(int *p, int pass){
return *(p+pass);
}

int LocateElem(int *p1,int e,int leng1){
for (int count=0; count<leng1; count++)
if (e==*(p1+count))
return 1;
else
return 0;
}

int ListInsert(int **p, int e, int lengA){
lengA+=1;
int* temp;
temp=(int*)realloc(*p, lengA*sizeof(int));
if (temp==NULL) {
printf("Error allocating memory!\n"); //print an error message
free(temp);
return 0; //return with failure
}
else{
*p=temp;
*(*p+lengA-1)=e;

}
return lengA;

}

void Show(int *p, int leng){
for (int count=0; count<leng; count++) {
printf("%d\t", *(p+leng));
}
}

它一直在运行,但可用内存一直在减少!请帮助我。谢谢!

最佳答案

线路

while(LocateElem(p1, e, leng1)==0)

总是返回 true 并且 while 循环永远不会退出并继续运行该行:

leng1=ListInsert(&p1, e, leng1);

这又会永远分配内存

int ListInsert(int **p, int e, int lengA){
lengA+=1;
int* temp;
temp=(int*)realloc(*p, lengA*sizeof(int));
.
.
.

关于c++ - 无法获取输出 union 集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15414479/

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