-1

我似乎无意中覆盖了我的 C 程序中的某些部分内存。为了解决这个问题,我真诚地下载了 DrMemory,它会抛出一个错误,通知我发生这种讨厌的行。
我遇到的第一个错误是这个:

~~Dr.M~~ Note: @0:00:00.802 in thread 7376
~~Dr.M~~ Note: refers to 0 byte(s) beyond last valid byte in prior malloc
~~Dr.M~~ Note: prev lower malloc:  0x00c00eb0-0x00c00eb4
~~Dr.M~~ Note: instruction: cmp    (%eax) $0x00

根据文档,这意味着我试图访问我首先分配的最后一个内存字节。怎么错了?

触发错误的函数:

void str_add_char(String* s, const char ch) {
  size_t length = s->length;
  if(length+1==s->size) {
    s->size+=s->size/2+1;
    s->c_str = (char*)realloc(s->c_str, s->size);  
  }
  s->c_str[length]=ch;
  s->c_str[length+1] = 0;
  s->length++;
}
4

1 回答 1

0

您需要重新分配s->size+1-> C 用来标记字符串结尾的 NULL 终止符的 +1 帐户。

于 2014-05-11T16:58:52.890 回答