Tag: 动态内存分配

应该何时使用动态内存分配函数与直接变量声明?

以下是直接变量声明的示例。 double multiplyByTwo (double input) { double twice = input * 2.0; return twice; } 下面是动态内存分配的示例。 double *multiplyByTwo (double *input) { double *twice = malloc(sizeof(double)); *twice = *input * 2.0; return twice; } 如果我有一个选择,我会一直使用直接变量声明,因为代码看起来更具可读性。 什么时候动态内存分配更合适?

在程序结束时检测到堆栈粉碎

我正在测试一个较小规模的程序,以便在我尝试通过return 0;退出程序时区分问题return 0; 在主要function的最后。 MAIN.C #include #include #include “Header.h” int main (void) { int i; int Fin = 0; Student sStu; Array aAry; Student *Stu = &sStu; Array *Ary = &aAry; InitArray(Ary, 1); while(Fin != 2) { printf(“Please choose a selection.\n”); printf(“1. Add Student\n”); printf(“2. Print Students\n”); printf(“3. Exit\n”); scanf(“%d”, &i); switch(i) { case 1: […]

指针数组并动态分配字符串的内存

这个问题与这个问题有关 。 我正在定义一个150b的字符数组,并将字符串复制到它: const gchar *strAuth; gchar *strings[18][150]; strcpy(strings[0],strAuth); 这对于大多数情况来说是巨大的内存浪费,对于某些极端情况可能不够。 正如所引用的问题所建议的那样,“创建一个指针数组并动态地为字符串分配内存”是一个更好的主意。 我怎么能做到这一点? 请帮助。

我可以用新的内存分配一块内存吗?

所以考虑到这个c结构: typedef struct { int* arr1; int* arr2; } myStruct; 这个答案描述了使用单个malloc同时分配myStruct和它的数组: myStruct* p = malloc(sizeof(*p) + 10 * sizeof(*p->arr1) + 10 * num * sizeof(*p->arr2); if(p != NULL) { p->arr1 = (int*)(p + 1); p->arr2 = p->arr1 + 10; } 我想知道有没有类似的方法来做到这一点? 显然,我希望能够分配到我在运行时收到的大小,就像使用C示例一样。

使用NULL数组将内存分配给2D数组(c)

感谢您花时间阅读本文。 在我的问题中,“向量”被定义为整数的一维数组。 因此,矢量arrays将是2D维arrays,其中每个矢量可以具有不同的长度。 我被要求使用: int ** vectors – 2D数组 int size -an整数,表示**向量中存在多少向量 int * sizes – 一个整数的1D数组,表示向量的长度 例如,对于: vectors = {{4,3,4,3},{11,22,33,44,55,66},NULL,{5},{3,33,333,33,3}}。 大小为5(向量内有5个向量)。 size是{4,6,0,1,5}(4是第一个向量的长度,依此类推)。 用户在main()的开头输入大小,**矢量&*大小用动态分配大小的值。 我被要求写这个函数: int init(int *** vectors,int ** sizes,int size),它将**向量初始化为NULL数组,将* sizes初始化为零数组。 我想出了这段代码: #define _CRT_SECURE_NO_WARNINGS #include #include int init(int*** vectors, int** sizes, int size) { int i, k,j; printf(“check\n”); *vectors = (int**)malloc(size * sizeof(int*)); […]

从输入C动态分配矩阵

我一直在尝试这段代码而且效果不佳。 void *matrix_allocate_variable (int size) { void *p1; if ((p1=(int*)malloc(size))==NULL){ printf(“out of memory.\n”); exit(1); } return p1; } 在这里,我创建了一个调用malloc并在出错时退出的函数,以便我可以在我的下一个函数中使用它: void matrix_new(int **matrices, int *row_counts, int *column_counts, char specifier) { int index, i; index= (int)(specifier-‘A’); scanf(“%d”,&row_counts[index]); scanf(“%d”,&column_counts[index]); matrices[index]= (int*)matrix__allocate_variable(sizeof(int)* (row_counts[index]*column_counts[index]); 这是我遇到问题的地方。 我正在尝试让用户输入一些用于创建矩阵的输入,但是我在尝试使其工作时遇到了很多问题。 有人可以帮我开始吗? PS。 有关更多详细信息,我在functions.c中创建函数,这是我到目前为止所拥有的。 我有一个main.c调用这些函数,以便稍后我可以添加,减去和转置,但到目前为止,我正在尝试输入数据,这是我遇到很多麻烦。 这是我的main.c ,我称之为函数。 /* Pointer to the set of matrix registers. […]

C – 如何释放动态分配的内存?

看看这段代码,它是链表的一部分。 int main() { List* head1 = NULL; insertFront(&head1, 1); insertFront(&head1, 2); print(head1); free(head1); return 0; } 另一个function是: void insertFront(List** head, int value) { List* node = (List*)malloc(sizeof(List)); node->data = value; node->next = NULL; node->next = *head; *head = node; //free(node); essentially I am not freeing node } 我的问题是: 我的代码是否会导致内存泄漏问题? 我是否需要为节点(在函数内部)释放已分配的内存(动态)? 如果我释放head1,那么为节点分配的内存是否也会被释放? 如果是,那怎么样?

什么算法适用于小内存块的连续重新分配?

在C程序中我面临需要有大量内存块的事务,我需要知道是否有用于处理所有这些malloc / free的算法或最佳实践teqnique,我已经使用数组来存储这些内存块但是在某些情况下指出数组本身已满,重新分配数组只是更浪费,处理这个问题的优雅方法是什么?

MPI_Gatherv:创建和收集可变大小的数组(MPI + C)

我是MPI的新手,我试图并行管理不同大小的数组,然后将它们传递给主线程,到目前为止还没有成功。 我已经了解到了 MPI_Gatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, const int *recvcounts, const int *displs, MPI_Datatype recvtype, int root, MPI_Comm comm) 是这种情况下的方法。 这是我的示例代码,由于内存问题而无效(我认为)。 #include #include #include #include int main (int argc, char *argv[]) { MPI_Init(&argc, &argv); int world_size,*sendarray; int rank, *rbuf=NULL, count; int *displs=NULL,i,*rcounts=NULL; MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &world_size); if(rank==0){ rbuf = malloc(10*sizeof(int)); displs […]

没有malloc的c中的动态内存分配

这是我的一位朋友写过的C程序。 据我所知,在C99引入VLA之前,或者在运行时使用malloc之前,必须在编译时初始化数组。 但是这里程序接受用户的const值并相应地初始化数组。 它工作正常,即使使用gcc -std=c89 ,但对我来说看起来非常错误。 是否所有编译器都依赖? #include int main() { int const n; scanf(“%d”, &n); printf(“n is %d\n”, n); int arr[n]; int i; for(i = 0; i < n; i++) arr[i] = i; for(i = 0; i < n; i++) printf("%d, ", arr[i]); return 0; }