注册 登录
编程论坛 C++教室

小错误,该怎么改?

泉水天堂 发布于 2008-12-12 18:36, 533 次点击
#include<iostream.h>
typedef struct{
    int *data;
    int length;
}ST;
int creat(ST *t, int key){    //折半查找开始
    int low,mid,high;
    int flag;
    low=1;
    flag=0;
    high=t->length;
    while(low<=high){
        mid=(low+high)/2;
        if(key<t->data[mid])
            high=mid-1;
        else if(key>t->data[mid])
            high=mid+1;
        else
        {flag=mid;
        break;}
    }
    return flag;
}
void main(){
    int a[]={1,2,3,4,5,6,7,8,9,11};
    ST *p;
    int f;
    p->data=a;         //错误
    f=creat(p,3);
    cout<<f;
}
错误提示:local variable 'p' used without having been initialized
2 回复
#2
koolism2008-12-12 19:52
void main(){
    int a[]={1,2,3,4,5,6,7,8,9,11};
    ST *p = new ST;
    int f;
    p->data=a;         //错误
    f=creat(p,3);
    cout<<f;
    delete p;
}
#3
snowstorm2008-12-12 20:03
#include<iostream.h>
typedef struct{
    int *data;
    int length;
}ST;
int creat(ST *t, int key)
{   
    //折半查找
   int low,mid,high;
    int flag;
    low=1;
    flag=0;
    high=t->length;
    while(low<=high)
   {
        mid=(low+high)/2;
        if(key<t->data[mid])
            high=mid-1;
        else if(key>t->data[mid])
            low = mid +1; //这儿应该是low,你可能马虎了
        else
        {
            flag=mid;
            break;
        }
    }
    return flag;
}
void main(){
    int a[]={1,2,3,4,5,6,7,8,9,11};
    ST *p = new ST; //你的错误是指针变量没有被初始化,
                   //任何指针变量刚被创建时不会自动成为NULL指针,它的缺省值是随机的,它会乱指一气。
                   //你这样就修改了内存,引起错误
    int f;
    p->data=a;
   p->length = sizeof(a) / sizeof(int); //你也没有将数组的长度计算出来
    f=creat(p,3);
    cout<<f;
    delete p;//释放指针
}
以上仅供参考哈

[[it] 本帖最后由 snowstorm 于 2008-12-12 20:07 编辑 [/it]]
1