读书人

c语言 malloc 有关问题?

发布时间: 2013-09-08 15:21:21 作者: rapoo

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

读书人网 >C语言

热点推荐