반복 요소없이리스트 Lb와 La를 결합하고자하는 샘플 테스트 일뿐입니다. 그것은 작동하고 -1073741510을 반환, 나는 어쩌면 배열 오버 플로우를 생각하지만, 문제가왜이 C 프로그래밍을 올바르게 실행할 수 없습니까?
어디 있는지 찾을 수 없습니다되지 않았습니다 내 코드입니다 :
#include <stdio.h>
void Union(char *La, char *Lb);
int ListLength(char *L);
void GetElem(char *L, int i, char *e);
int LocateElem(char *L, char *e, int (*comp)(char a, char b));
int compare(char a, char b);
void ListInsert(char *, int, char *);
int main(){
char *La;
char *Lb;
int i;
for(i = 0; i <= 10; ++i){
La[i] = i;
Lb[i] = i + 5;
}
La[i] = '\0';
Lb[i] = '\0';
Union(La, Lb);
for(i = 0; La[i] != '\0'; ++i){
printf("%c\n", La[i]);
}
return 0;
}
//unite La and Lb without repeat elements
void Union(char *La, char *Lb){
int La_length = ListLength(La);
int Lb_length = ListLength(Lb);
int i = 0;
char *e;
for(i; i<= Lb_length; ++i){
GetElem(Lb, i, e);
if(!LocateElem(La, e, compare))
ListInsert(La, ++La_length, e);
}
}
//caculate the length of L
int ListLength(char *L){
int i;
for(i = 0; *(L + i) != '\0'; ++i);
return i;
}
void GetElem(char *L, int i, char *e){
*e = *(L + i);
}
//search the element e in L, if exist return the location, else return 0
int LocateElem(char *L, char *e, int (*comp)(char a, char b)){
int i;
for(i = 0; *(L + i) != '\0'; ++i){
if(comp(*(L + i), *e)) return i + 1;
}
return 0;
}
//compare the element a and b
int compare(char a, char b){
if(a == b) return 1;
return 0;
}
//if e doesn't exit in L, insert the e in L
void ListInsert(char *L, int i, char *e){
int j;
for(j = ListLength(L) - 1; j >= i; --j){
*(L + j + 1) = *(L + j);
}
L[ListLength(L)] = '\0';
*(L + i - 2) = *e;
}
첫 번째 문제는 La와 Lb에 메모리를 할당하지 않았다는 것입니다. main()에서 for 루프를 사용하기 전에 malloc을 사용하여 메모리를 할당하십시오. – user1596193
코드를 더 쉽게 이해하려면 :'GetElem (L, i, & e)'대신'L (j)'와'e (L + j)'대신'L [j]'를 사용하십시오. – jop
또한 (더 많은) 메모리를 다시 할당하지 않고도 문자 배열에 데이터를 추가 할 수 없습니다. – Ionic