Tag: free

我在结构指针上调用free()correclty吗?

因此,在测试我的结构时,我使用以下方法。 你可以看到我在方法末尾的指针上调用free。 这是正确的吗? void test() { VariableVector *labelVector = initVariableVector(); VariableVector *variableVector = initVariableVector(); // do some stuff with labelVector and variableVector free(labelVector); free(variableVector); } 这是我的struct init方法的样子: Variable* initVariable(char *variableName, char *arrayOfElements, int32_t address) { Variable* initializedVariable = malloc(sizeof(Variable)); if (initializedVariable != NULL ) { initializedVariable->variableName = variableName; initializedVariable->arrayOfElements = arrayOfElements; initializedVariable->address = address; return […]

ANSI C动态内存分配以及何时应该释放内存

我试图了解内存分配并在ANSI C中释放它们。问题是我不知道何时释放它们。 1)程序是否自由释放已分配的内存(即使我没有通过free() )? 2)假设我的代码是这样的:(请不要担心这些结构的完整代码。我只关注逻辑) snode = (stock_node *) realloc(snode, count * sizeof(stock_node)); struct stock_list slist = { snode, count }; stock_list_ptr slist_ptr = (stock_list_ptr) malloc(sizeof(stock_list_ptr)); slist_ptr = &slist; tm->stock = slist_ptr; 所以上面; snode转到stock_list,stock_list转到slist指针,然后转到tm-> stock。 现在,因为我已经将它们全部分配给了tm-> stock,我是否必须释放snode和slist_ptr? 因为tm struct将用于程序的其余部分。 如果我免费使用snode和slist_ptr将tm结构丢失值?

C中链表的可用内存

我一直试图释放加载到链表中的文件的已分配内存,我已设法释放节点,但我无法弄清楚如何释放文件的值副本的已分配内存。 我尝试过这样的事情: void FreeString(struct node * newNode) { for (int i = 0; i string); } } 但是编译器会因为分段错误而崩溃,而valgrind仍会指出内存泄漏。 如果有人能告诉我我做错了什么,并指出正确的方向,我们将不胜感激。 完整代码: 结构: typedef struct node { char *string; struct node *next; }node; //这里的主要function…… void Push(struct node **RefHead, char *word) { struct node *newNode = NULL; newNode = (struct node *)malloc(sizeof(node)); newNode->string = (char*)malloc(strlen(word) + 1); // […]

释放c – loop中的子串

我正在尝试为结构’ structs ‘的每个成员获取一个子字符串,然后将该子字符串分配给temp_struct的新成员。 我遇到的问题是如何在每次迭代时释放子字符串,由于某种原因代码运行,但是valgrind抛出一个Invalid read of size 1的Invalid read of size 1 ,我假设我正在读取内存块。 我怎么能释放子串呢? 谢谢 #include #include #include struct st_ex { char product[16]; float price; }; struct st_temp { char *prod; }; char *temp = NULL; // from stackoverflow char* substr( const char* source, size_t start, size_t end ) { char* dest = malloc( end […]

如何释放一个char指针数组?

我使用此方法将列表中的值转换为数组,以便在execvp()中使用 – 系统调用: char **list2argarray(struct shellvalue *values, int count) { char **array = (char **)malloc((count + 1) * sizeof(char *)); int i = 0; while (values) { char *word = values->word; array[i] = (char *)malloc(sizeof(word) + 1); strcpy(array[i], word); values = values->next; i++; } array[i] = NULL; return array; } 什么是释放这些数组的正确方法? 我试过像这样的东西 void freeargpointer(char **array, […]

C中的free和C ++中的删除之间的区别?

我知道C中的自由操作是告诉编译器这个特定的内存块是免费的,编译器可以用它来进一步分配,但内存没有被释放。 在C ++中删除怎么样? 和免费一样吗?

如何在C中正确使用strtok,以便没有内存泄漏?

我对在C中使用char指针调用strtok时会发生什么感到困惑。我知道它会修改字符串的内容,所以如果我在名为’line’的变量上调用strtok,它的内容将会改变。 假设我遵循以下方法: void function myFunc(char* line) { // get a pointer to the original memory block char* garbageLine = line; // Do some work // Call strtok on ‘line’ multiple times until it returns NULL // Do more work free(garbageLine); } 进一步假设’line’在传递给myFunc之前被malloced。 我应该在使用strtok之后释放原始字符串还是为我们完成工作? 另外,如果’line’没有被malloced并且我尝试使用上面的函数会发生什么? 取而代之的是更安全吗? (假设程序员知道该行未被malloced,则不会免费拨打电话) 调用 char* garbageLine = line; myFunc(line); free(garbageLine); function定义 void […]

尝试释放堆管理器分配的内存时会发生什么,分配的内容超过了要求?

我在接受采访时问了这个问题。 假设char * p = malloc(n)分配多于n,分配N个字节的内存,free(p)用于释放分配给p的内存。 堆管理器可以执行这样的错误分配吗? 现在发生了什么,将释放n个字节或释放N个字节? 有什么方法可以找到释放多少内存? 编辑 有什么方法可以找到释放多少内存? 有总比没有好, mallinfo()可以像“Fred Larson”所指出的那样轻松一些

检测到glibc,realloc():指针无效

我为冗长的代码道歉。 我有一个简单的问题,但我认为我包含了我的代码,所以我很清楚我来自哪里。 我得到了realloc腐败。 我认为腐败是因为我没有正确解放。 实际上我不确定glibc甚至说或意味着什么。 任何人都能简单地向我解释一下吗? 再次抱歉冗长的代码。 #include “draw2.h” #include “draw2a.h” #include “draw2b.h” const char Exec_c[] = “java -jar Sketchpad.jar”; void parseFile(FILE * fp, FILE *sketcher){ char line [MAX_WORD] = {“NULL”}; char word [MAX_WORD] = {“NULL”}; char figureName [MAX_WORD] = {“NULL”}; struct figure *pointsAndname; long int countNumberoffigures = 0; printOutput(); long int temp = 10; […]

C – 如何从Stdin或文件内存中读取字符串行

我需要一个读取行的版本,即内存保存。 我有这个“工作”的解决方案。 但我不确定它与记忆的表现如何。 当我启用free(text)它适用于几行,然后我收到一个错误。 所以现在虽然我是malloc文本,但是文本和结果都没有被释放。 那是对的吗 ? 为什么会这样呢? #include #include #include char* readFromIn() { char* text = malloc(1024); char* result = fgets(text, 1024, stdin); if (result[strlen(result) – 1] == 10) result[strlen(result) – 1] = 0; //free(text); return result; } 我有很多短线要阅读,我还需要stdin可以用FILE*句柄替换。 我没有必要重新分配文本,因为我只有短线。