Tag: malloc

在C中分配矩阵

我想分配一个矩阵。 这是唯一的选择: int** mat = (int**)malloc(rows * sizeof(int*)) for (int index=0;index<row;++index) { mat[index] = (int*)malloc(col * sizeof(int)); }

在malloc’d内存上使用sizeof()

可能重复: 关于malloc和sizeof的新手问题 我正在尝试将字符串读入程序。 当我注意到字符串有时被破坏时,我尝试了以下代码: void *mallocated = malloc(100); printf(“sizeof(mallocated) = %d\n”, sizeof(mallocated)); 根据我的程序, mallocated的大小是8 ,即使我为它分配了100个字节。 因此,每当我尝试存储长度超过8个字节的字符串时,第8个字节后的所有内容有时会消失。 为什么会发生这种情况,我该如何预防呢?

如何在C中的函数中使用realloc

基于我在这里学到的东西: 通过C中的函数操作动态数组 。 void test(int data[]) { data[0] = 1; } int main(void) { int *data = malloc(4 * sizeof *data); test(data); return 0; } 这很好用。 但是,我也试图在函数中使用realloc 。 void increase(int data[]) { data = realloc(data, 5 * sizeof *data); } 这符合但运行时程序崩溃。 题 我应该如何在函数中使用realloc? 我知道我应该将realloc的结果分配给变量并检查它是否为NULL 。 这只是一个简化的例子。

解除内存后,我们如何才能访问指针?

据我了解, free()用于释放我们之前使用malloc分配的内存。 在我的下面的代码片段中,我释放了我分配的内存。 但即使在释放后我也可以访问指针? 怎么可能? 内部免费如何运作? #include using namespace std; int main() { int *p=(int *)malloc(sizeof(int)); *p=17; free(p); *p=*p+1; printf(“\n After freeing memory :: %d “,*p ); return 0; }

C – 在函数中分配矩阵

我试图使用一个带有尺寸和三指针的函数来分配矩阵。 我已经分配了一个int **(设置为NULL),我将其地址作为函数的参数传递。 由于某种原因,这给了我一个mem访问冲突。 void allocateMatrix(int ***matrix, int row, int col) { int i; if((*matrix = (int**)malloc(row * sizeof(int*))) == NULL) { perror(“There has been an error”); exit(EXIT_FAILURE); } for(i = 0; i < row; ++i) { if((*matrix[i] = (int*)malloc(col * sizeof(int))) == NULL) { perror("There has been an error"); exit(EXIT_FAILURE); } } } /* […]

从K&R书中解释malloc的这种实现

这是Kernighan和Ritchie关于C的书的摘录。 它显示了如何实现malloc一个版本。 虽然评论很好,但我很难理解它。 有人可以解释一下吗? typedef long Align; /* for alignment to long boundary */ union header { /* block header */ struct { union header *ptr; /* next block if on free list */ unsigned size; /* size of this block */ } s; Align x; /* force alignment of blocks */ }; typedef union […]

在malloc()之后写入指针越界,不会导致错误

当我尝试下面的代码时它工作正常。 我错过了什么吗? main() { int *p; p=malloc(sizeof(int)); printf(“size of p=%d\n”,sizeof(p)); p[500]=999999; printf(“p[0]=%d”,p[500]); return 0; } 我尝试使用malloc(0 * sizeof(int))或其他任何东西,但它工作得很好。 当我根本不使用malloc时,程序只会崩溃。 因此,即使我为数组p分配了0个内存,它仍然可以正确地存储值。 那么,为什么我甚至打扰了malloc呢?

在C中退出程序时释放所需的内存

如果我使用malloc在我的C程序中分配内存,现在我想退出,我是否必须释放分配的内存,或者我可以假设,因为我的整个程序终止,它将被操作系统释放? 我在Linux环境中运行。

程序终止后动态分配内存

当包含动态分配的内存(使用malloc / new)而没有空闲/删除调用的C / C ++程序终止时,动态分配的内存会发生什么? 操作系统是否收回内存或者其他程序无法访问该内存?

堆分配一个2D数组(不是指针数组)

我正在编写C代码,我想堆分配512 * 256字节。 为了方便起见,我希望能够使用语法数组[a] [b]访问元素; 没有算术来找到正确的索引。 我在网上看到的每个教程都告诉我要创建一个指针数组,指向我在数组中想要的行数组。 这意味着每个子数组都需要单独进行malloc和free。 我感兴趣的是一个解决方案,只需要一次调用malloc和一次调用free。(因此所有元素都是连续的)我认为这是可能的,因为我不会构造一个锯齿状数组。 如果有人可以分享声明这样一个数组的语法,我将不胜感激。