繁体   English   中英

释放重新分配导致错误

[英]Freeing realloc causing error

我试图释放在以下程序中分配的内存:

include <stdio.h>
#include <stdlib.h>

void main(int argc, char** argv) {
  int* x = (int *) malloc(4 * sizeof(int));
  int i;

  for(i = 0; i < 4; i++) {
   x[i] = i;
   printf("X[%d] = %d\n", i, x[i]);
  }

   x = (int *) realloc(x, 4 * sizeof(int));

   for(i = 0; i < 8; i++) {
     x[i] = i;
     printf("X[%d] = %d\n", i, x[i]);
//   free(x[i]);
   }

  free(x);
}

我得到以下信息:libC中止错误: *检测到glibc ./a.out:free():无效的下一个大小(快速):0x00000000014f8010 * *

我试图在最后一个循环内释放,但这仍然带来问题。 我要去哪里错了?

realloc()不会将分配的内存增加指定的数量。 它精确地重新分配了请求的字节数。 因此,如果您想将数组的大小调整为8个整数长,则需要:

x = realloc(x, 8 * sizeof(int));

顺便说一句,不要在C中强制转换malloc()和realloc()的返回值:

http://c-faq.com/malloc/mallocnocast.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM