Tag: malloc

函数中使用的malloc的范围

当函数返回时,通过malloc分配的内存是否已释放? 或者仍然可以使用指针在main()函数中访问它? 例如。 void function(int *a) { a=(int *)malloc(sizeof(int)); *a=10; } int main() { int *num; function(num); printf(“%d”,*num); return(0); } 存储在a中的整数可以通过main()访问吗?

为什么free()不能真正释放内存?

我正在做一些分配和释放内存的测试。 这是我正在使用的代码: #include #include #define WAVE_SIZE 100000000 int main(int argc,char* argv[]){ int i; int **p; printf(“%d allocs…\n”,WAVE_SIZE); // Malloc printf(“Allocating memory…\n”); p = (int**)malloc(WAVE_SIZE*sizeof(int*)); for(i = 0;i < WAVE_SIZE;i++) p[i] = (int*)malloc(sizeof(int)); // Break printf("Press a key to continue…\n"); scanf("%*s"); // Dealloc printf("Deallocating memory…\n"); for(i = 0;i < WAVE_SIZE;i++) free(p[i]); free(p); // Break printf("Press a […]

struct中的可变长度数组

我正在用C语言编写应用程序(作为初学者),我正在努力在包含可变长度数组的结构中获取损坏的数据。 我发现在cprogramming.com上的论坛post以及cert.og / secure-coding中描述了类似的问题。 我以为我找到了正确的解决方案,但似乎没有。 结构看起来像这样; typedef struct { int a; int b; } pair; typedef struct { CommandType name; pair class; pair instr; pair p1; pair p2; pair p3; CommandType expected_next; char* desc; int size; pair sw1; pair sw2; pair* data; } command; 有问题的是“命令”。 对于“命令”的任何给定实例(或任何正确的短语),将设置不同的字段,但在大多数情况下,尽管在不同的实例中设置相同的字段。 我遇到的问题是在尝试设置expected_next,name,sw1,sw2,size和data字段时。 这是数据领域正在腐败。 我正在为这样的结构分配内存; void *command_malloc(int desc_size,int data_size) { return […]

最初mallocate 0元素以便以后重新分配和测量大小

我有一个函数,通过每次调用时重新分配新内存,为数组添加一个新位置。 问题在于,对于每次调用,我需要在第一次调用时从1开始向数组添加一个位置,但我知道在重新分配之前我必须进行mallocate。 所以我的问题是,我最初可以执行类似p = malloc(0) ,然后在我的函数中使用p = (int *)realloc(p,sizeof(int))重新分配吗? p声明为int *p 。 也许使用不同的语法? 当然,我可以在我的函数中创建一个条件,如果之前没有分配内存并且重新分配(如果有),则会动画定位,但我正在寻找更好的方法。 我遇到的第二个问题是……一旦重新分配更多位置,我想知道数组的大小。 我知道,例如,如果我声明一个数组a[10] ,元素的数量将由sizeof(a)/sizeof(a[0]) ,但由于某种原因,这对于声明的数组不起作用作为指针,然后重新分配。 任何建议?

无法理解sizeof()的返回值

我的代码中有这个: int x = 4; char* array = malloc(x*sizeof(char)); size_t arraysize = sizeof (array); printf(“arraysize: %zu\n”, arraysize); 这段代码打印出来, arraysize:8 为什么是8而不是4? (自4 * sizeof(char)= 4 * 1)

Malloc,免费和分段错误

我不明白为什么在这段代码中,对“free”的调用会导致分段错误: #include #include #include char *char_arr_allocator(int length); int main(int argc, char* argv[0]){ char* stringa = NULL; stringa = char_arr_allocator(100); printf(“stringa address: %p\n”, stringa); // same address as “arr” printf(“stringa: %s\n”,stringa); //free(stringa); return 0; } char *char_arr_allocator(int length) { char *arr; arr = malloc(length*sizeof(char)); arr = “xxxxxxx”; printf(“arr address: %p\n”, arr); // same address as “stringa” […]

差异b / w在1行或逐行中将内存分配给2Darrays

在这两种情况下,访问数组或内存分配会产生什么影响: 1。 int **arr; arr = malloc( sizeof(int) * row * column ); 2。 int **arr; arr = malloc( sizeof(*arr) * row); for(i=0; i<row; i++) arr[i] = malloc( sizeof( **arr) * column));

使用strcpy时打印垃圾

我有一个函数可以解析一些数据。我的问题是在使用strncpy后,当我尝试打印它时会得到一些垃圾。 我尝试使用malloc使char数组具有确切的大小。 码: void parse_data(char *unparsed_data) { char *temp_str; char *pos; char *pos2; char *key; char *data; const char newline = ‘\n’; int timestamp = 0; temp_str = (char*)malloc(strlen(unparsed_data)); g_print(“\nThe original string is: \n%s\n”,unparsed_data); //Ignore the first two lines pos = strchr(unparsed_data, newline); strcpy(temp_str, pos+1); pos = strchr(temp_str, newline); strcpy(temp_str, pos+1); //Split the line in […]

什么时候小心使用free()来释放malloc()用过的内存?

我在这里读了很多问题,其中有一些关于c中free()函数的文章释放了未使用变量的内存。 就我而言,我有以下代码块。 char *injectStrAt(char *str, char *strToIn, int pos) { char *strC = malloc(strlen(str) + strlen(strToIn) + 1); strncpy(strC, str, pos); strC[pos] = ‘\0’; strcat(strC, strToIn); strcat(strC, str + pos); return strC; } 我用上面的函数将一个字符串块注入一个数组。 我正在使用malloc来创建一个新的char* 。 在上面的例子中我是否需要free(strC) ? 建议请。

释放已分配的内存:realloc()与free()

所以我有一块内存分配了malloc() ,稍后用realloc()更改。 在我的代码中的某些时候我想要清空它,我的意思是基本上给它0的内存。用realloc(pointer,0)直观地做一些事情。 我在这里读到这是实现定义的,不应该使用。 我应该使用free() ,然后再做另一个malloc()吗?