簡體   English   中英

Valgrind中的讀取大小無效

[英]Invalid read size in 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()-它在C中做什么?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM