首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

为啥这段C代码运行出错

2013-04-02 
为什么这段C代码运行出错?就是一个简单的程序把La和Lb合并且没有重复元素,不知道问题出在哪,编译通过了,但

为什么这段C代码运行出错?
就是一个简单的程序把La和Lb合并且没有重复元素,不知道问题出在哪,编译通过了,但是运行错误,感觉好像是数组越界了?
求指导...
    #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;
    }





I don't know where the problem is. c
[解决办法]
花了我半袋烟功夫,改了改,不知道合不合你的意思:


#include<stdio.h> 

#define  MAX_ARR 10+1

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 arrLa[MAX_ARR *2] = {0};
char arrLb[MAX_ARR] = {0};
int i,iii;
for(i = 0; i <MAX_ARR; ++i)
{
arrLa[i] = 65 + i;
arrLb[i] = 70 + i;
}

Union(arrLa, arrLb);

for(i = 0; arrLa[i] != '\0'; ++i)
{
printf("Result:%c ", arrLa[i]);
}
printf("\n\n");

system("pause");
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[2];

for(i; i<= Lb_length; ++i)
{
memset(e, 0, 2) ;
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[0] = *(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;
}


[解决办法]
    int main(){
        char *La;//这里都没分配内存就开始用了?
        char *Lb;//这里都没分配内存就开始用了?
        int i;
        for(i = 0; i <= 10; ++i){
            La[i] = i;//La,Lb仅仅是个字符指针,指针访问越界了
            Lb[i] = i + 5;
        }

热点排行