Tag: malloc

为什么在释放指针后取消引用时会得到不同的结果?

我对C中的内存管理(以及Debian GNU / Linux下的GCC 4.3.3)提出了疑问。 根据K&R的C编程语言书(第7.8.5节),当我释放指针然后取消引用它时,是一个错误。 但是我有些怀疑,因为我注意到有时候,就像我在下面粘贴的源代码一样,编译器(?)似乎按照明确定义的原则工作。 我有一个像这样的简单程序,它显示了如何返回动态分配的数组: #include #include int * ret_array(int n) { int * arr = (int *) malloc(10 * sizeof(int)); int i; for (i = 0; i < n; i++) { arr[i] = i*2; } printf("Address pointer in ret_array: %p\n", (void *) arr); return arr; } int * ret_oth_array(int n) { […]

如何在C中释放内存?

我正在编写具有大量1维和2维数组的代码。 我得到了“错误:无法分配区域”,我认为这是因为分配了太多内存。 我使用“malloc”和“free”函数,但我不确定我是否正在使用它们。 也许你知道我在哪里可以看到C中内存管理的好例子? 所以..我只是想让一个算法工作,现在这个代码只是函数后的函数.. //memory allocation for 1D arrays buffer = malloc(num_items*sizeof(double)); //memory allocation for 2D arrays double **cross_norm=(double**)malloc(150 * sizeof(double *)); for(i=0; i<150;i++) { cross_norm[i]=(double*)malloc(num_items*sizeof(double)); } //code Window(N, window_buffer); STFTforBMP(buffer,N,f, window_buffer); getMagnitude(buffer,f, N, magnitude); calculateEnergy(flux,magnitude, f); calculateExpectedEnergy(expected_flux, candidate_beat_period, downbeat_location, f); calculateCrossCorrelation(cross, flux, expected_values, f); findLargestCrossCorrelation(&cross_max, cross, f); normalizeCrossCorrelation(cross_norm, &cross_max, cross, f); …………… 我该如何使用freefunction?

一个malloc在C中有多大?

我在C中有一个malloc,它是26901 ^ 2 * sizeof(double) 这让我想到这里最大的价值是什么? 另外,定义宏来访问这个2D数组有什么问题吗? #define DN(i,j) ((int)i * ny + (int)j) 因为这对我来说似乎不起作用 – 或者我至少不确定是这样。 我无法弄清楚如何在宏上进行全视图潜水,告诉我A [DN(indx,jndx)]实际上是在看什么。

如何将值存储在内存中的特定位置?

也许这是一个简单的问题,但我真的很想知道它。 如果我想在内存中的某个特定地址(堆中)存储一个值,比如一个int,我该怎么做? 说,我想将int值10存储在0x16。 我想通过调用new或malloc来做到这一点:int * p = new int(10); 然后我想将存储的值的地址设置为0x16。 起初我觉得像&p = 0x16这样的东西,但这不起作用。 我需要这样做以在内存中的某个值前面存储一些附加信息(之前通过malloc或new分配了内存空间)。 我正在使用Linux和C ++(但C也可以)。 我想要实现的是:一个进程调用大小为x的malloc,我想在分配的内存前面存储一个特定的值(大小),所以我可以稍后访问该大小(当调用free时)。 由于malloc被调用,我知道操作系统为该值分配空间的指针,我只想将指定内存的大小存储在指定内存前面的4个字节中。 我所做的(在我编写的malloc钩子中)是分配更多内存(通过内部mallok调用)但我还需要能够在特定位置存储此大小值。 我感谢所有的帮助。

仅使用返回的指针获取malloc的大小

我希望能够改变我的数组的大小,所以我这样创建一个: int* array; array = malloc(sizeof(int)*10);//10 integer elements 我可以像往常一样使用它像数组一样,但是当我试图找到它的大小时: size = sizeof(array)/sizeof(int); 我得到了答案1,因为它没有将其识别为指向数组 如何获得arrays的大小? (我知道它在技术上不是一个数组,但有没有办法计算出分配的内存块的整个大小?) 我也正确地假设我在描述中说明了什么? 如果我在技术上对某事有误,请纠正我。

C,Malloc()和数组长度

可能重复: 如何找到sizeof(指向数组的指针) 我正在学习如何在C中创建动态数组,但遇到了一个我无法弄清楚的问题。 如果我使用代码: int num[10]; for (int i = 0; i < 10; i++) { num[i] = i; } printf("sizeof num = %li\n sizeof num[0] = %li", sizeof(num), sizeof(num[0])); 我得到输出: sizeof num = 40 sizeof num[0] = 4 这就是我期望发生的事情。 但是,如果我malloc数组的大小如下: int *num; num = malloc(10 * sizeof(int)); for (int i = 0; i < […]

我应该检查malloc()是否成功?

如果成功,应该在每个malloc()之后检查吗? malloc()是否有可能失败? 那么会发生什么? 在学校我们被告知我们应该检查,即: arr = (int) malloc(sizeof(int)*x*y); if(arr==NULL){ printf(“Error. Allocation was unsuccessful. \n”); return 1; } 有什么做法? 我可以这样做吗: if(!(arr = (int) malloc(sizeof(int)*x*y))

变量大小的数组与C中的calloc

关于动态内存的讨论: “C指针和动态内存简介” 作者说: 像这样的存储块可以有效地用作更灵活的arrays。 在现实世界的C程序中,这种方法实际上更为常见。 它比“可变大小arrays”更具可预测性和灵活性 他正在讨论的内存块类型是这样的: const int size = 5; int * array = calloc(size, sizeof(int)); 然后使用另一个指针迭代数组: int * index = array; for (i = 0; i < size; i++) { *index = 1; // or whatever value index++; } 我的问题是这个方法比这样的标准变量大小的数组更好吗?: int array[variable]; 或动态的: char name[] = “Nick”; 作者并没有真正阐明为什么我更喜欢前一种方法而不是后一种方法。 或者更具体地说:它如何更“可预测和灵活”?

为什么或何时需要在C中动态分配内存?

动态内存分配是C编程中非常重要的主题。 但是,我无法找到一个很好的解释,这使我们能够做到这一点,或者为什么需要这样做。 我们不能只声明变量和结构,而不必使用malloc()吗? 作为旁注,有什么区别: ptr_one = (int *)malloc(sizeof(int)); 和 int *ptr_one = malloc(sizeof(int));

malloc编译错误:类型为“int”的值不能用于初始化int(*)类型的实体

我现在必须尝试过20种方法。 我真的需要帮助,无论我做什么,我都会收到与此类似的错误。 a value of type “int” cannot be used to initialize an entity of type “int (*)[30]” 即这会让我这样的错误 int(*array)[160] = malloc((sizeof *array) * 10); 并做这样的事情 int** Make2DintArray(int arraySizeX, int arraySizeY) { int** theArray; theArray = (int**) malloc(arraySizeX*sizeof(int*)); int i; for (i = 0; i < arraySizeX; i++) { theArray[i] = (int*) malloc(arraySizeY*sizeof(int)); } return […]