Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

memory error using valgrind, strcpy

I've been using valgrind, but for some reason I keep getting a memory error using a simple string copy with two strings that are the same size, in C.

The Code effected is:

node->entry = (char*)malloc(strlen(string)*sizeof(char));
strcpy(node->entry, string);

With string being: char* string = "Hello There". The Error is: Invalid write of size 2

==2035==    at 0xD494: memmove$VARIANT$sse42 (mc_replace_strmem.c:987)
==2035==    by 0x100001793: __inline_strcpy_chk (_string.h:94)
==2035==    by 0x100001699: createList (main.c:10)
==2035==    by 0x100001BE6: main (main.c:132)
==2035==  Address 0x10000c0fa is 10 bytes inside a block of size 11 alloc'd
==2035==    at 0xB823: malloc (vg_replace_malloc.c:266)
==2035==    by 0x100001635: createList (main.c:9)
==2035==    by 0x100001BE6: main (main.c:132)

Thanks for the Help!

like image 838
Cail Demetri Avatar asked Apr 14 '26 09:04

Cail Demetri


1 Answers

malloc(strlen(string)*sizeof(char));

You are not taking the ending '\0' into account. So it should have been (strlen(string) + 1).


Side note:

type *x;
x = malloc(size * sizeof(*x))

is much more maintainable than

type *x;
x = (type *)malloc(size * sizeof(type));

because you don't repeat yourself 3 times.

like image 133
Shahbaz Avatar answered Apr 16 '26 22:04

Shahbaz