Tag: 免费

如何检查指针是否已在C中释放?

我想检查指针是否已经释放。 我如何使用gnu编译器设置?

使用realloc(X,0)代替free()并使用长度为+1的malloc +1

所以这次我真的不知道如何把这个头衔。 首先,我想说,如果问题与“家庭作业”有关,我在这个页面上看到了一些关于警告的评论。 我的是,但它也已完成,我只是想进一步了解代码发生了什么。 我已经阅读了一段时间的post和书籍,但我想我仍然缺少一些东西。 在我使用的代码中,我有两行代码,我不太明白。 这项工作是关于获取用作参数的任何文件(如果它是0个文件,它从stdin读取),并将其打印在标准输出上。 所有这些,谈论C,因为我试图放入标签。 第一个问题是: array = realloc (array, 0); 其中数组定义为 char **array; 而问题是免费不起作用,它没有释放使用的空间(也许我用错了?在其他地方我知道如何使用它,但不是这次)。 通过我已经完成的测试和我读过的内容,我相信realloc也在做同样的事情,但我不是100%。 第二个是: char* alloc = malloc (strlen ((char*)string)+1); 其中alloc用于复制我要放入数组的行的确切长度,所以我可以在此之后向后打印文本。 问题是为什么我必须使用+1。 我的意思是如果由于某种原因我不使用它不起作用,我尝试使用不同的数字,它每次都有效,但如果我不这样做+1它不能正常工作。 我知道可能这个问题太模糊,写得不好真的得到回答但又一次,我不确定,我尽力解释自己(英语没有母语,因为它可能很明显)。

什么时候小心使用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) ? 建议请。

为什么不将free(p)设置为NULL?

任何原因导致这不能成为free()标准行为? 多个指针指向同一个对象: #include #include void safefree(void*& p) { free(p); p = NULL; } int main() { int *p = (int *)malloc(sizeof(int)); *p = 1234; int*& p2 = p; printf(“p=%p p2=%p\n”, p, p2); safefree((void*&)p2); printf(“p=%p p2=%p\n”, p, p2); safefree((void*&)p); // safe return 0; } 来自malloc赋值要求从void* 反之亦然: safefree()要求转换为void*& (参考)

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

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

堆栈内存上的free()

我在Solaris上支持一些c代码,至少我认为它是奇怪的: char new_login[64]; … strcpy(new_login, (char *)login); … free(new_login); 我的理解是,由于变量是本地数组,因此内存来自堆栈而不需要释放,而且由于没有使用malloc / calloc / realloc,因此行为未定义。 这是一个实时系统,所以我认为这是一个浪费周期。 我错过了一些明显的东西吗

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

我对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中释放struct还有数据?

当我运行此代码时: #include typedef struct _Food { char name [128]; } Food; int main (int argc, char **argv) { Food *food; food = (Food*) malloc (sizeof (Food)); snprintf (food->name, 128, “%s”, “Corn”); free (food); printf (“%d\n”, sizeof *food); printf (“%s\n”, food->name); } 我还是得到了 128 Corn 虽然我已经解放了食物。 为什么是这样? 记忆真的被释放了吗?

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

据我了解, 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中退出程序时释放所需的内存

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