Tag: 内存管理

cudaMalloc的结构和相同结构的元素

我想知道当我分配一个结构然后分配(?)并复制相同结构的指针元素时,设备上会发生什么(内存方面)。 我是否还需要元素* a的 cudaMalloc ? 示例代码: typedef struct { int *a; … } StructA; int main() { int row, col, numS = 10; // defined at runtime StructA *d_A = (StructA*)malloc(numS * sizeof(StructA)); int *h_A = d_a->a; cudaMalloc( (void**)&(d_A), numS * sizeof(StructA) ); cudaMalloc( &(d_A->a), row*col*sizeof(int) ); // no (void**) needed? cudaMemcpy( d_A->a, h_A, row*col*sizeof(int), […]

我可以将std :: string传递给DLL吗?

我将代码片段分离为DLL因为它会经常更新,因此它应该更容易部署。 但我对我可以做什么以及我不能用DLL做什么有疑问。 我可以将std:string或CString传递给DLL吗? 我可以将指针传递给带有std::string members的struct并将其填入DLL吗? DLL返回指向那里分配的结构的指针吗? 它会有效吗? 我可以删除吗? 什么应该更好地传递, std::String或Cstring ? 谢谢 !

分配大型(5000+)arrays

我正在处理一个应用程序,如果输入的数据有三种可能的大小: 小:1000个元素 中= 5000个元素 大= 500,000个元素 问题是我无法分配大型数组。 似乎不接受大于5000的尺寸。 我执行以下操作时出现运行时错误: long size=1000; char ch; int arr[size]; ch=getch(); if(ch==..) size=…; 1000和5000的尺寸似乎工作正常,但我怎样才能以这种方式制作500k的arrays?

如何释放c 2darrays

我有以下代码: int **ptr = (int **)malloc(sizeof(int*)*N); for(int i=0;i<N;i++) ptr[i]=(int*)malloc(sizeof(int)*N)); 我怎么能免费使用ptr? 我应该循环ptr和free ptr [i]吗? 或者只是做 free(ptr) 和ptr将被释放?

2D char数组的动态内存

我已经声明了一个数组char ** arr; 如何初始化2D char数组的内存。

C:指向结构指针数组的指针(分配/释放问题)

我已经回到了C的某些东西,但是我很难记住这个内存管理的工作原理。 我想要一个指向结构指针数组的指针。 说我有: struct Test { int data; }; 那么数组: struct Test **array1; 它是否正确? 我的问题是处理这件事。 因此,数组中的每个指针都指向单独分配的内容。 但我认为我需要先做到这一点: array1 = malloc(MAX * sizeof(struct Test *)); 我无法理解上述内容。 我需要这样做,为什么我需要这样做? 特别是,如果我要为指针指向的每个东西分配内存,为指针分配内存意味着什么? 现在说我有一个指向结构指针数组的指针。 我现在希望它指向我之前创建的相同数组。 struct Test **array2; 我是否需要像上面那样为指针分配空间,或者我可以这样做: array2 = array1

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

我对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?

可以在c的运行时确定数组的大小吗?

据我所知,在编译c的时间之前,数组需要具有特定的大小。 我想知道为什么这段代码仍然有用? int s; printf(“enter the array size: “); scanf(“%d”,&s); int a[s]; // Isn’t s value determined at run time?

2D和3Darrays的动态分配/释放

我知道动态分配/解除分配2D数组的算法,但是对于3D数组我也不太清楚。 利用这些知识和一点对称性,我想出了以下代码。 (我在编码期间很难在3D中进行可视化)。 请评论正确性并建议任何更好的替代方案(效率方面或直观方面),如果有的话。 此外,我认为这些2D和3D数组都可以正常访问,如静态数组,如arr2D [2] [3]和 arr3D [2] [3] [2]。 对? 二维码 //allocate a 2D array int** allocate2D(int rows,int cols) { int **arr2D; int i; arr2D = (int**)malloc(rows*sizeof(int*)); for(i=0;i<rows;i++) { arr2D[i] = (int*)malloc(cols*sizeof(int)); } } //deallocate a 2D array void deallocate2D(int** arr2D,int rows) { int i; for(i=0;i<rows;i++) { free(arr2D[i]); } free(arr2D); } 3D代码 //allocate […]