我似乎无意中覆盖了我的 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++;
}