堆块已修改超过请求的大小2.C中出现错误



因此以下代码导致错误:

// free pointers created with malloc
for (int i = 0; i < 3; i++) {
    if (rt_offset_rs[i] != NULL ) {
        free(rt_offset_rs[i]); // <== AT THiS LINE
    }

错误:0000000000331DD0处的堆块在0000000000331DE2处修改,超过请求的2 大小

我一点也不理解这个错误。以下是我操作指针rt_offset_rs:的代码

            char** rt_offset_rs; 
    rt_offset_rs = malloc(3 * sizeof(char*));
    if (rt_offset_rs == NULL ) {
        fprintf(outputFilePointer, "no more memory");
        exit(1);
    }
    for (int i = 0; i < 3; i++) {
        rt_offset_rs[i] = malloc(2 * sizeof(char));
        if (rt_offset_rs[i] == NULL ) {
            fprintf(outputFilePointer, "no more memory");
            exit(1);
        }
    }

错误不在free()调用中,而是在此之前的某个地方,只有您的系统只在某些情况下检查溢出,其中一个是free,而不是在每次写入缓冲区时。

它不是代码的一部分,但似乎您分配了两个字节,并向缓冲区写入至少3个字节(如果它是字符串-不要忘记null终止符是另一个字节)

我在执行以下操作时遇到了这个问题。

#include <malloc.h>
int main()
{
    const char* s = "123";
    void** p = (void**)malloc(1);
    *p = (void*)s;
    free(p);
}

该代码在x64内部版本中调用以下错误:

HEAP[XXX.exe]:000001C207A21D60处的堆块在修改000001C207A21DA5超过请求的35 大小

该代码在Win32构建中调用以下错误:

检测到HEAP腐蚀:在0x00636110处的正常块(#93)之后。CRT检测到应用程序在堆结束后写入内存缓冲器

malloc行错误。应该这样修改:

void** p = (void**)malloc(1*sizeof(void*));

因为指针的大小是sizeof(void*)字节,而不是一个字节!

相关内容

  • 没有找到相关文章

最新更新