Tag: 动态分配

如何为struct本身及其成员分配内存

我有这个结构: struct foo { char *a; char *b; char *c; char *d; }; 它可能为struct本身及其成员分配空间而不是例如, struct foo f; fa = malloc(); fb = malloc(); fc = malloc(); fd = malloc(); strcpy(fa, “a”); strcpy(fb, “b”); //.. 像这样的东西(它不起作用): struct foo f = malloc(sizeof(struct f)); strpcy(fa, “a”); //etc

正确分配多维数组

这个问题的目的是提供一个关于如何在C中动态正确分配多维数组的参考。这是一个经常被误解的主题,即使在一些C编程书籍中也很难解释。 因此,即使是经验丰富的C程序员也很难做到正确。 我从编程教师/书籍/教程中了解到,动态分配多维数组的正确方法是使用指针指针。 然而,SO上的几个高代表用户现在告诉我这是错误的和不好的做法。 他们说指针指针不是数组,我实际上并没有分配数组,而且我的代码不必要地慢。 这就是我被教导分配多维数组的方法: #include #include #include int** arr_alloc (size_t x, size_t y) { int** pp = malloc(sizeof(*pp) * x); assert(pp != NULL); for(size_t i=0; i<x; i++) { pp[i] = malloc(sizeof(**pp) * y); assert(pp[i] != NULL); } return pp; } int** arr_fill (int** pp, size_t x, size_t y) { for(size_t i=0; i<x; i++) […]

使用struct for c的分配内存错误

我写了一个管理库的代码; 编译完成但在模拟过程中我获得了一个Allocation error (case2) ,我不知道为什么。 第一种情况正常,但如果我在第一种情况下输入了多个名称,则第二种情况不起作用。 我做错了什么? 我希望我足够清楚。 typedef struct { char name[80]; char **books; int books_num; } Subscription; int main() { // Variables declaration: int option = 0, subs_num = 0, i = 0, books_num = 0; Subscription *subs_library; char **books; char subs_new_name[80], book_new_name[80]; printf(“Choose an option\n”); do { scanf(“%d”, &option); switch (option) { […]

如何在C中为char **动态分配内存

我将如何在此函数中动态分配内存到char **列表? 基本上这个程序的想法是我必须从文件中的单词列表中读取。 我不能假设最大字符串或最大字符串长度。 我必须用C字符串做其他的东西,但那些东西我应该没问题。 谢谢! void readFileAndReplace(int argc, char** argv) { FILE *myFile; char** list; char c; int wordLine = 0, counter = 0, i; int maxNumberOfChars = 0, numberOfLines = 0, numberOfChars = 0; myFile = fopen(argv[1], “r”); if(!myFile) { printf(“No such file or directory\n”); exit(EXIT_FAILURE); } while((c = fgetc(myFile)) !=EOF) { numberOfChars++; […]

二维数组动态内存分配崩溃

可能重复: 如何在C中正确设置,访问和释放多维数组? 我正在尝试使用calloc为2D数组动态分配内存。 列固定为2,因此它只是动态的行。 这是我一直在尝试的: unsigned int **pts, rows; int main() { //some code pts = (unsigned int **)calloc(2*rows, sizeof (unsigned int **)); } //The code to access the array : for(k=1;k<=i;k++) { printf("\nX%d=",k); scanf("%d",&pts[k][0]); printf("\nY%d=",k); scanf("%d",&pts[k][1]); } 但问题是,在访问arrays时,程序崩溃了。 我正在使用Eclipse和MinGW GCC。 如果我需要在这里提供更多数据或者让我知道如何处理这个问题,请告诉我,因为这是我的第一篇文章。

动态分配2维数组

我试图通过动态分配来构建二维数组。 我的问题是它的第一个维度可能需要100个值,那么第二个维度会根据我的问题采用可变数量的值吗? 如果有可能那么我将如何访问它? 我怎么知道第二维的边界?

堆栈和堆中的内存分配

这似乎是一个非常基本的问题,但它一直在我脑海中: 当我们分配一个局部变量时,它会进入堆栈。 类似地,动态分配会导致变量进入堆。 现在,我的问题是,这个变量实际上是在堆栈还是堆上,或者我们只是堆栈和堆中的引用。 例如, 假设我声明了一个变量int i 。 现在这个i被分配在堆栈上。 那么,当我打印i的地址时,这将是堆栈中的一个位置? 堆的问题也一样。

如何分配具有内存的二维数组? 如何使用它来访问行和列? 举个例子

我创建了一个2 d数组,其内容如下 int i,j,lx,ly;// lx,ly are the row and column respectively double** a; a=(double**) malloc((lx+2)*sizeof(double)); a[0]= (double*) malloc((lx+2)*(ly+2)* sizeof(double)); assert(a[0]); for(i=1;i<lx+2;i++) { a[i]=a[i-1]+i*(ly+2); } //我为这个数组中的所有元素分配值0,如下所示 for(i=0;i<(lx+2)*(ly+2);i++) { a[i]=0; } //我打印下面的所有元素 for(i=0;i<(lx+2)*(ly+2);i++) { printf("position %d values %d\n",i,a[i]); } //当我看到输出时,它显示我在一个特定位置的垃圾值13.我无法弄清楚..还请告诉我如何访问像Eg这样的行和列来访问第7列第0行和第5行以lx表示第6行,如我的代码所示

我可以在C中释放()静态和自动变量吗?

代码如下: #include int num = 3; // Static external variable int *ptr = &num; int main(void) { int num2 = 4; // Automatic variable int *ptr2 = &num2; free(ptr); //Free static variable free(ptr2); //Free automatic variable return 0; } 我尝试编译上面的代码,它的工作原理,我很好奇free()函数是否能够释放静态变量和自动变量? 或者基本上什么也没做?

动态分配数组的大小

分配给动态分配的数组的起始地址的指针是否不具有数组大小的信息? 所以我们必须使用另一个变量来存储它的大小,以便以后通过指针处理数组。 但是当我们释放动态分配的数组时,我们不指定大小,而只是“free ptr”或“delete [] ptr”。 如何释放或删除知道数组的大小? 我们可以使用相同的方案来避免将数组的大小存储在另一个变量中吗? 谢谢!