Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 更改指针后将释放多少字节的free()?_C++_C_Malloc_Free - Fatal编程技术网

C++ 更改指针后将释放多少字节的free()?

C++ 更改指针后将释放多少字节的free()?,c++,c,malloc,free,C++,C,Malloc,Free,我有下面的代码 char* p = malloc(10); p = p + 1; free(p); 在上述代码中 调用malloc(10)时,malloc如何返回内存地址 将释放多少字节的空闲(p) free()如何知道要释放多少字节 正如free的手册页所示,除了从malloc返回的指针之外,任何参数都有未定义的行为: free()函数释放ptr指向的内存空间,该内存空间必须由以前对malloc()、calloc()或realloc()的调用返回。否则,或者如果之前已经调用了free(ptr

我有下面的代码

char* p = malloc(10);
p = p + 1;
free(p);
在上述代码中

  • 调用malloc(10)时,malloc如何返回内存地址
  • 将释放多少字节的空闲(p)
  • free()如何知道要释放多少字节

  • 正如
    free
    的手册页所示,除了从
    malloc
    返回的指针之外,任何参数都有未定义的行为:

    free()函数释放ptr指向的内存空间,该内存空间必须由以前对malloc()、calloc()或realloc()的调用返回。否则,或者如果之前已经调用了free(ptr),则会发生未定义的行为。如果ptr为NULL,则不执行任何操作

    关于
    free
    如何知道块的大小:一个典型的内存分配器实现对每个块都有一个头(包含大小、自由列表指针等),并且
    free
    知道这个头的大小以及与
    malloc
    返回的指针的偏移量


    这也回答了您的第一个问题:
    malloc
    分配这样一个块并返回指向实际对象开头的指针。

    这样做是未定义的行为。不允许将修改后的指针传递给free。你能指望的最好是撞车,你必须得到一个error@purec,很遗憾不是,这是未定义的行为。我的编译器在“%a.out”中给我错误***错误:free():无效指针:0x086e9009***中止非常好!谢谢你的解释。