Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.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
程序崩溃malloc/free,C_C_Malloc - Fatal编程技术网

程序崩溃malloc/free,C

程序崩溃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()中给出的数据量是动态的

如果我没有释放内存,程序会在打印Hello world后出错!
如果我释放内存,它会在释放之前给出一个错误。

因为
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,请阅读is
int tablou(n)
的最后一部分,正确,我遗漏了什么?是的。这是一个function@ClockWork它缺少参数类型。是因为你重新输入了代码吗?发布时不要重新键入代码,我发现您遗漏了参数
n
的类型,请复制并粘贴您的代码,以便问题仍然存在。@ClockWork我是说在没有键入函数签名的情况下写入
n
buffer = malloc((n+1) * sizeof(int));
buffer = malloc((n + 1) * sizeof(*buffer));