Tag: 免费

如何检查char *是否指向C中的字符串文字

我有一个结构 struct request { int code; char *message; }; 我想要正确地自由。 我有以下function来做到这一点: void free_request(struct request *req) { if (req->message != NULL) { free(req->message); } free(req); req = NULL; } 问题是当我尝试释放使用字符串文字创建的请求时,我从编译器得到“free():invalid pointer”/ segfault错误: struct request *req; req = malloc(sizeof(struct request)); req->message = “TEST”; free_request(req); 因为我想在不同的地方创建请求结构,一旦使用文字(在客户端)和一次使用我从套接字读取的*字符(在服务器端)我想知道是否有一个函数来确保我不要试图释放文字,同时仍允许我释放我使用malloc创建的消息。

如何释放函数返回的指针?

#include #include #include char* f(void) { char *x; x = malloc(sizeof(char) * 4); strcpy(x, “abc”); return(x); } int main(void) { char *a; a = f(); printf(“%s”, a); free(a); return(0); } 是否必须释放函数中的变量x ? 如果是这样,当我需要退货时,这怎么可能呢?

我是否需要释放strtok结果字符串?

或者更确切地说,strtok如何生成它的返回值指向的字符串? 它是否动态分配内存? 我问,因为我不确定是否需要在以下代码中释放令牌: STANDARD_INPUT变量用于退出过程,以防我内存耗尽以进行分配,字符串是测试对象。 int ValidTotal(STANDARD_INPUT, char *str) { char *cutout = NULL, *temp, delim = ‘#’; int i = 0; //Checks the number of ladders in a string, 3 is the required number temp = (char*)calloc(strlen(str),sizeof(char)); if(NULL == temp) Pexit(STANDARD_C); //Exit function, frees the memory given in STANDARD_INPUT(STANDARD_C is defined as the names given […]

malloc()的奇怪行为

试着理解我的问题的答案 尝试释放堆管理器分配的内存时会发生什么,分配的内容超过了要求? 我写了这个函数,并对其输出感到困惑 int main(int argc,char **argv){ char *p,*q; p=malloc(1); strcpy(p,”01234556789abcdefghijklmnopqrstuvwxyz”); //since malloc allocates atleast 1 byte q=malloc(2); // free(q); printf(“q=%s\n”,q); printf(“p=%s\n”,p); return 0; } 产量 q=vwxyz p=01234556789abcdefghijklm! 任何人都可以解释这种行为吗? 或者这个实现是否具体? 如果free(q)被取消注释,我也会收到SIGABRT。

在_SUCCESS和_FAILURE上退出()释放分配的内存

这是一段简短的代码片段,如果失败则会有两次exit(3)调用。 这些调用是否释放malloc分配的内存? 谷歌搜索曾经说过它,甚至更多次,它没有…… 我应该添加free()吗? 另外:哪个更好if (!word) (它也可以用于例如.word == 0,这与word == NULL不同,所以我猜它是错的)或if (word == NULL) ? char *word = NULL, *temp = NULL; word = (char *)malloc(sizeof(char) * size); if (!word) { /* or maybe rather it should be (word == NULL) */ perror(“malloc fail”); if (fclose(fp)) { perror(“fclose fail”); exit(3); /* exit without free ? […]

如何在C中进行自动内存管理?

在C内存分配/释放由malloc和free 。 在C ++内存分配/解除分配由new和delete 。 C ++中有一些用于自动内存管理的解决方案,例如: 智能指针。 RAII(资源获取初始化) 引用计数和循环引用 … 但是如何在C中进行自动内存管理? C中的AUTOMATIC内存管理有什么解决方案吗? 对于C,有没有任何指导或类似的指导? 我想要free一块内存: 我的代码没有编译 – 要么 – 内存自动解除分配 然后我说: 哦,C比C ++,Java和C#更好。 🙂

strtok和内存泄漏

我用strtok()写了一个简单的url解析器。 这是代码 #include #include typedef struct { char *protocol; char *host; int port; char *path; } aUrl; void parse_url(char *url, aUrl *ret) { printf(“Parsing %s\n”, url); char *tmp = (char *)_strdup(url); //char *protocol, *host, *port, *path; int len = 0; // protocol agora eh por exemplo http: ou https: ret->protocol = (char *) strtok(tmp, “/”); […]

如何用指针向另一个结构释放结构的记忆

我有两个结构 struct SimpleXY { double x; double y; }; struct SimpleXyLink { int num_xy; SimpleXY *simpleXyList; }; 我想知道SimplyXyLink释放内存的正确方法是什么? 我目前正在使用 void Free(SimpleXyLink *myList) { free(myList->simpleXyList); } 但我认为这是错误的,因为它不会释放simpleXyList元素内的内存。

释放内存两次

在C和C ++中,释放NULL指针将导致无法完成任务。 不过,我看到有人说如果你“两次释放内存”会导致内存损坏。 这是真的? 当你释放记忆两次时,引擎盖下发生了什么?

释放C中的字符串

如果我愿意写: char *a=malloc(sizeof(char)*4); a=”abc”; char *b=”abc”; 我需要释放这个内存,还是由我的系统完成?