【发布时间】:2015-02-11 04:54:32
【问题描述】:
我再次假设它是一个指针问题,但我在这里要做的是有一个函数搜索内存来查看是否存在 IP 地址,如果不存在,则保留一个随机内存空间用于IP 地址并返回零。该函数将 IP 地址作为字符串作为第一个参数,第二个参数指向结构。当 main() 函数执行时,result 应该等于 0,result2 应该等于 1,但是,我得到了崩溃,我认为这与我分配指针的方式有关?
在这个片段中...
ip=(iprec*)p;
我正在尝试设置传递给函数的 iprec 结构(之前由 malloc 分配),但我不确定在该语句中添加或删除星号的位置。
这是其余的代码。
char *shma;
typedef struct{
unsigned char u;
unsigned char a[4];
unsigned int otherdata;
} iprec;
static int loadip(char* remoteip,iprec *ip){
char *p=shma;
int v=0;
char *ep;
unsigned char a[4];
sscanf(remoteip,"%d.%d.%d.%d",a[0],a[1],a[2],a[3]);
int i,n;int sz=5000;
int szr=sizeof(iprec);
for (i=3;i<sz;i+=szr){
ip=(iprec*)p;
if (ip->u=='Y'){
for (n=0;n<=4;n++){
if (a[n]!=ip->a[n]){break;}
}
if (n >= 3){v=1;break;}
}else{
ep=p;
}
p+=szr;
}
if (v==0){
ip=(iprec*)ep;
for (n=0;n<=3;n++){
ip->a[n]=a[n];
}
}
return v;
}
int main(){
char *shma=(char*)malloc(5000); //alloc 5000 bytes for example.
iprec *x=(iprec*)malloc(sizeof(iprec));
int result=loadip("127.0.0.1",x);
int result2=loadip("127.0.0.1",x);
}
【问题讨论】:
-
0)
char *shma=(char*)malloc(5000);设置为局部变量shma -
1)
ip=(iprec*)p;ip的未使用参数 -
2)
sscanf(remoteip,"%d.%d.%d.%d",a[0],a[1],a[2],a[3]);:a[0],a[1],a[2],a[3]不是int *,只是char。