c - Valgrind 中的读取大小无效

标签 c valgrind

>>Invalid read of size 1
==9464==    at 0x4C28804: __GI_strlen (mc_replace_strmem.c:284)
==9464==    by 0x400C11: dynamicAllocateStr (in /home/xkaya/DomTree/domtree)
==9464==    by 0x400CDC: createElement (in /home/xkaya/DomTree/domtree)
==9464==    by 0x400E50: cloneNode (in /home/xkaya/DomTree/domtree)
==9464==    by 0x4006A2: main (in /home/xkaya/DomTree/domtree)
==9464==  Address 0x51c0461 is 0 bytes after a block of size 1 alloc'd
==9464==    at 0x4C26FDE: malloc (vg_replace_malloc.c:236)
==9464==    by 0x400C21: dynamicAllocateStr (in /home/xkaya/DomTree/domtree)
==9464==    by 0x400CDC: createElement (in /home/xkaya/DomTree/domtree)
==9464==    by 0x40086D: internalReadNode (in /home/xkaya/DomTree/domtree)
==9464==    by 0x4008BB: internalReadNode (in /home/xkaya/DomTree/domtree)
==9464==    by 0x4008BB: internalReadNode (in /home/xkaya/DomTree/domtree)
==9464==    by 0x400A18: internalReadDocument (in /home/xkaya/DomTree/domtree)
==9464==    by 0x400A33: readDocument (in /home/xkaya/DomTree/domtree)
==9464==    by 0x400685: main (in /home/xkaya/DomTree/domtree)

代码:

char* dynamicAllocateStr(char* string)
{
int length;
char* result;
int i;

if (string == NULL)
    return NULL;

length = strlen(string);
result = (char*)malloc(length);

for (i = 0; i <  length; i++) {
    result[i] = string[i];
}

return (result);
}

这是 createElement 函数

  element* createElement(const char* name, const char* text) {
element* result;

if (name == NULL)
    return NULL;

result =  (element*)malloc(sizeof(element));

if (result == NULL)
    return NULL;

result->parent = NULL;
result->nextSibling = NULL;
result->previousSibling = NULL;
result->firstChild = NULL;
result->lastChild = NULL;     
result->name = dynamicAllocateStr((char*)name);
result->text = dynamicAllocateStr((char*)text);   

return (result);
  }

有人可以告诉我我做错了什么吗?

最佳答案

我在 dynamicAllocateStr 中发现一个问题。

复制字符串时,必须为空终止符 \0 分配内存并复制它。

注意:您可以简单地使用 strdup,您的平台要么已经支持它,要么您可以使用此处的实现:strdup() - what does it do in C?

关于c - Valgrind 中的读取大小无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15718200/

相关文章:

c - 使用管道连接子进程

c - 当循环在 C 中重复超过 127 次时发生内存泄漏

c - Valgrind 无效释放,内存泄漏

c++ - valgrind:中断 crypto++ zlib 测试

c - 在文本文件中搜索匹配字符串

c - : main(){}, int main(){} 和 int main(void){} 有什么区别

c - 如何访问 Rust 中的 C 常量?

混淆 == EOF 与 feof

c++ - Valgrind:是否可以接受越来越多的可能丢失的字节?

android - Android 5/L 上的 Valgrind 崩溃