当前位置: 技术问答>linux和unix
malloc(): memory corruption问题
来源: 互联网 发布时间:2016-03-05
本文导语: typedef struct tagKZXSEROUTS{ char zxserip[16]; int zxseroutch; char zxserphone[10]; int zxserinch; struct tagKZXSEROUTS *next; } ZXSEROUTS; int createZXSEROutchs(char *ip, int outch, char *phone) { ZXSEROUTS *pc, *tmppc; printf("1111111,sizeof:%dn", sizeof(ZX...
typedef struct tagKZXSEROUTS{
char zxserip[16];
int zxseroutch;
char zxserphone[10];
int zxserinch;
struct tagKZXSEROUTS *next;
} ZXSEROUTS;
int createZXSEROutchs(char *ip, int outch, char *phone)
{
ZXSEROUTS *pc, *tmppc;
printf("1111111,sizeof:%dn", sizeof(ZXSEROUTS));
if ((pc = (ZXSEROUTS *)malloc(sizeof(ZXSEROUTS))) == NULL)
{
printf("22222222n");
}
//pc = (ZXSEROUTS *)malloc(sizeof(ZXSEROUTS));
printf("33333333n");
sprintf(pc->zxserip, "%s", ip);
pc->zxseroutch = outch;
pc->zxserinch = -1;
sprintf(pc->zxserphone, "%s", phone);
pc->next = NULL;
if (g_poutchhead)
{
tmppc = g_poutchhead;
while (tmppc->next)
{
tmppc = tmppc->next;
}
tmppc->next = pc;
}else
{
g_poutchhead = pc;
}
return 0;
}
==================
1111111,sizeof:40
33333333
33333333,,sizof:10
1111111,sizeof:40
*** glibc detected *** malloc(): memory corruption: 0x08287eb8 ***
忽略
开始的时候是可以运行的,后来因为需要在结点中加了一个变量(sprintf(pc->zxserphone, "%s", phone);)再执行就出现上面的问题了,我在网上也找过资料,但是没有明白。
网上基本上说是堆被破坏了,或free两次出现的问题,可是我没有进行free,也只是分配一下内存而以,为什么会出这个问题呢,另外只要把sprintf(pc->zxserphone, "%s", phone);注释,代码就就可以正常运行了,可是这行是必须的,我该怎么办呢?
char zxserip[16];
int zxseroutch;
char zxserphone[10];
int zxserinch;
struct tagKZXSEROUTS *next;
} ZXSEROUTS;
int createZXSEROutchs(char *ip, int outch, char *phone)
{
ZXSEROUTS *pc, *tmppc;
printf("1111111,sizeof:%dn", sizeof(ZXSEROUTS));
if ((pc = (ZXSEROUTS *)malloc(sizeof(ZXSEROUTS))) == NULL)
{
printf("22222222n");
}
//pc = (ZXSEROUTS *)malloc(sizeof(ZXSEROUTS));
printf("33333333n");
sprintf(pc->zxserip, "%s", ip);
pc->zxseroutch = outch;
pc->zxserinch = -1;
sprintf(pc->zxserphone, "%s", phone);
pc->next = NULL;
if (g_poutchhead)
{
tmppc = g_poutchhead;
while (tmppc->next)
{
tmppc = tmppc->next;
}
tmppc->next = pc;
}else
{
g_poutchhead = pc;
}
return 0;
}
==================
1111111,sizeof:40
33333333
33333333,,sizof:10
1111111,sizeof:40
*** glibc detected *** malloc(): memory corruption: 0x08287eb8 ***
忽略
开始的时候是可以运行的,后来因为需要在结点中加了一个变量(sprintf(pc->zxserphone, "%s", phone);)再执行就出现上面的问题了,我在网上也找过资料,但是没有明白。
网上基本上说是堆被破坏了,或free两次出现的问题,可是我没有进行free,也只是分配一下内存而以,为什么会出这个问题呢,另外只要把sprintf(pc->zxserphone, "%s", phone);注释,代码就就可以正常运行了,可是这行是必须的,我该怎么办呢?
|
33333333,,sizof:10 是哪里打出来的?
你每次把phone的值打出来看看,有没有可能超长了?我觉得就是因为phone超长(长度大于9)导致内存侵犯了。
你每次把phone的值打出来看看,有没有可能超长了?我觉得就是因为phone超长(长度大于9)导致内存侵犯了。
|
phone字符串的长度大于10了。因为成员zxserphone的长度是10。如果你存个手机号,那就是11位,加上0位的,字符串结束符'',就造成了2个字符的溢出。
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。