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

c语言 malloc 有关问题?

2013-09-08 
c语言 malloc 问题???本帖最后由 bycgeek 于 2013-08-31 07:38:53 编辑系统是linux 出错代码如下:char *ge

c语言 malloc 问题???
本帖最后由 bycgeek 于 2013-08-31 07:38:53 编辑 系统是linux 出错代码如下:

char *get_text_btwn(char *str, off_t start, off_t end)
{
    size_t len;
    char *text;
    len = end - start - 1;
    text = (char *)malloc(len + 1);
    str += (start + 1);
    strncpy(text, str, len);
    text[len]  = '\0';
    return text;
}


Valgrind调试信息(主要是如下两种):
==1215== Invalid write of size 1
==1215==    at 0x402C36B: strcat (in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)
==1215==    by 0x8048E81: go_pack_keyword (parser.c:247)
==1215==    by 0x80492DF: pack_word_struct (parser.c:300)
==1215==    by 0x8049383: main (main.c:22)
==1215==  Address 0x41fb0bd is 0 bytes after a block of size 5 alloc'd
==1215==    at 0x402BE68: malloc (in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)
==1215==    by 0x8048C7F: get_text_btwn (parser.c:219)
==1215==    by 0x8048E24: go_pack_keyword (parser.c:246)
==1215==    by 0x80492DF: pack_word_struct (parser.c:300)
==1215==    by 0x8049383: main (main.c:22)


==1215== Invalid write of size 1
==1215==    at 0x402C390: strcat (in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)
==1215==    by 0x8048FBA: go_pack_keyword (parser.c:255)
==1215==    by 0x80492DF: pack_word_struct (parser.c:300)
==1215==    by 0x8049383: main (main.c:22)
==1215==  Address 0x41fb0d2 is not stack'd, malloc'd or (recently) free'd
==1215== 
c语言 malloc 调试


[解决办法]
strcat越界了啊。

我操,这么明显的提示,楼上都在胡说啥呢。
[解决办法]

引用:
简单描述下我是怎么用strcat的吧:

char string[]="0123456789"
char *p1 = string;
char *p2;
char *str1 = malloc(3);
char *str2 = malloc(2);
strncpy(str1, p1, 3);
p1 += 3;
strncpy(str2, p1, 2);
p2 = str1;
strncat(p2, str2, 2); //期待str2是"01234"

有什么地方用错了么,请指教


p2指向str1为malloc(3),你再后面strcat,肯定出问题了,
另外 使用strncpy时好点的写法都这样,memset(dest,0,sizeof(dest));strncpy(dest,src,sizeof(src)); 
(dest能够放下src,dest是个先声明的空间)
[解决办法]
strcat_s
strncat_s

热点排行