程序崩溃malloc/free,C
如果我没有释放内存,程序会在打印Hello world后出错!程序崩溃malloc/free,C,c,malloc,C,Malloc,如果我没有释放内存,程序会在打印Hello world后出错! 如果我释放内存,它会在释放之前给出一个错误。因为malloc以字节为单位分配空间,并且一个整数的宽度大于1字节,所以 free(buffer); 应该是 buffer = (int*)malloc(n+1); 您应该为n+1整数分配空间。因此,您必须将其乘以类型的大小 一种更干净、更易于维护的方法是 buffer = malloc((n+1) * sizeof(int)); 我想知道-如果malloc()中给出的数据量是动态的
如果我释放内存,它会在释放之前给出一个错误。因为
malloc
以字节为单位分配空间,并且一个整数的宽度大于1字节,所以
free(buffer);
应该是
buffer = (int*)malloc(n+1);
您应该为n+1
整数分配空间。因此,您必须将其乘以类型的大小
一种更干净、更易于维护的方法是
buffer = malloc((n+1) * sizeof(int));
我想知道-如果
malloc()
中给出的数据量是动态的,编译器如何理解它应该用free()
释放多少数据?@Angivare这是一个公平的问题。但可能不在这里。@Angivare编译器没有malloc
将数字保留在某个地方(通常在它提供给您的地址之前),然后free
找到该数字。@Angivare编译器与此无关,编译器不会释放任何内存。free()
中的库代码正在这样做。请记住,free()
只是一个函数,它不是编译器的一部分。而且库确实获得了要释放的内存地址,所以它“只是”必须有一种方法将其与分配大小相关联。这可以通过很多很多种方式来实现。@Anigivare,请阅读isint tablou(n)
的最后一部分,正确,我遗漏了什么?是的。这是一个function@ClockWork它缺少参数类型。是因为你重新输入了代码吗?发布时不要重新键入代码,我发现您遗漏了参数n
的类型,请复制并粘贴您的代码,以便问题仍然存在。@ClockWork我是说在没有键入函数签名的情况下写入n
?
buffer = malloc((n+1) * sizeof(int));
buffer = malloc((n + 1) * sizeof(*buffer));