标签: free

C免费检查不起作用

我写了一个方法来释放我的结构.现在我有一个问题.当我两次调用此方法时,它会给我一个错误.但我确实检查我的结构中是否有某些东西,所以我不知道它是如何可能给我错误的.

我的结构:

typedef struct {
    int num_rows;
    int num_cols;
    int** data;
} matrix;
Run Code Online (Sandbox Code Playgroud)

我的免费方法:

void free_matrix(matrix* m){
    int i;
    for(i=0;i<m->num_rows;i++){
        if(m->data[i]!=NULL){
            free(m->data[i]);
        }
    }
    if(m->data!=NULL){
        free(m->data);
    }
}
Run Code Online (Sandbox Code Playgroud)

额外方法:

void fill_matrix_a(matrix* m){
    m->data[0][0] = 1;
    m->data[0][1] = 0;
    m->data[0][2] = 2;
    m->data[1][0] = 0;
    m->data[1][1] = 3;
    m->data[1][2] = 1;
}

void fill_matrix_b(matrix* m){
    m->data[0][0] = 0;
    m->data[0][1] = 3;
    m->data[1][0] = 2;
    m->data[1][1] = 1;
    m->data[2][0] = 0;
    m->data[2][1] = 4;
}

void init_matrix(matrix* m, int num_rows, int num_cols){ …
Run Code Online (Sandbox Code Playgroud)

c free dynamic-memory-allocation dangling-pointer

-1
推荐指数
1
解决办法
149
查看次数

malloc,memset和免费正确用法

我使用malloc,memset和free时遇到问题,这不能按预期工作.问题在于最新的printf功能,而不是打印"test",它打印一些奇怪的字符,然后进行测试,比如"@#°test".你能解释我为什么吗?我注意到如果我在第二个malloc之后做了一个memset,一切正常.另外,即使没有memset,如果我不调用函数"function()",我真的不明白为什么一切正常

这是我的代码:

#define size 10
void function(){
   ...
   ...other code...
   ...
   char *b=malloc(size);
   read(file_ds,b,size); //file_ds stands for file descriptor, correctly opened with open function.
   memset(b,0,size);
   free(b);
}

void main(){
   ...
   ...other code...
   ...
   function(); //If I don't call this, everything works fine, even without a memset
   char *c=malloc(size);
   strcat(c,"test");
   printf("%s",c);
}
Run Code Online (Sandbox Code Playgroud)

c malloc free memset

-1
推荐指数
1
解决办法
641
查看次数

C中的函数free()对我不起作用

我一直试图释放通过malloc()使用分配的内存free().

它的一些结构是免费的,但它们保留了它们的方式,它们也与它们的孩子保持联系.它也永远不会释放(gRootPtr)二叉树的根.

我正在使用Xcode来查明二叉树使用的内存是否已被释放,并使用if语句.

我用来释放内存的代码:

void FreeMemory(InfoDefiner *InfoCarrier)
{
    if ((*InfoCarrier) != NULL) {
        FreeMemory((&(*InfoCarrier)->left));
        FreeMemory((&(*InfoCarrier)->right));
        free((*InfoCarrier));
    }
}
Run Code Online (Sandbox Code Playgroud)

代码我用来查看内存是否已被释放.

if (gRootPtr != NULL) {
    return 1;
}
else{
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c malloc free std

-2
推荐指数
2
解决办法
1万
查看次数

在C++中自定义实现malloc

我遇到了一个面试问题,他们要求在C++中实现malloc()和free函数.

最开始声明一个大小为50000的char数组(50000字节).假设这是堆内存,编写malloc和free函数来分配内存块并释放内存.

任何人都可以为我提供C++工作/伪代码或只是解释机制?(显然代码会让它更容易理解).

谢谢,罗希特

c c++ memory malloc free

-2
推荐指数
1
解决办法
2786
查看次数

负索引; 在释放时给出错误

在C中,我在编写以下示例时遇到错误:

int *pointer;
int i = 0;
pointer = malloc(10 * sizeof(int));
pointer[i - 1] = 4;
Run Code Online (Sandbox Code Playgroud)

显然i是负面指数pointer.

即使错误的片段内存被更改,为什么只在free(pointer)[稍后在代码中] 触发错误?错误是:double free or corruption (out).

编辑:使用的编译器是 gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3

c malloc free

-2
推荐指数
1
解决办法
157
查看次数

为什么这个指针操作序列会导致错误?

为什么下面的(公认的深奥)指针操作会导致以下错误:

*** Error in /home/ubuntu/workspace/Project 3/Debug/Project 3': double free or corruption (out): 0x00007fffffffd7c0 ***

    int *intPointer = malloc(sizeof(int));
    *intPointer = 1;
    int intArray[] = { *intPointer };
    int *intPointer2 = &intArray[0];
    free(intPointer2);
Run Code Online (Sandbox Code Playgroud)

c free pointers

-2
推荐指数
1
解决办法
45
查看次数

C malloc和免费

我被教导如果你做malloc(),但你没有free(),内存将一直保持到重新启动.好吧,我当然测试了它.一个非常简单的代码:

#include <stdlib.h>

int main(void)
{
    while (1) malloc(1000);
}
Run Code Online (Sandbox Code Playgroud)

我在任务管理器(Windows 8.1)中查看了它.

嗯,该程序真的很快就占用了2037.4 MB而且就这样.我知道它可能是Windows限制程序.

但这是奇怪的部分:当我关闭控制台时,内存使用百分比下降,即使我被教导它不应该!

免费呼叫是多余的,因为操作系统无论如何都要释放它?

(这里的问题是相关的,但不能完全回答我是否应该自由.)

c malloc free memory-management

-2
推荐指数
1
解决办法
272
查看次数

free()不从结构数组中释放字符串

嗨所以我正在创建一个程序,它使用哈希来存储文本文件中的单词及其出现次数.这按预期工作.我遇到的问题来自于释放分配的内存.

这是我的哈希

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>
#include"hash.h"

/*
struct listnode{
    char * word;
    int count;
};
*/

void hashCreate(struct listnode * hashTable[], int size){
    int i;
    for(i=0;i<size;i++){
        hashTable[i]=(struct listnode *)malloc(sizeof(struct listnode));
        hashTable[i]->count=0;
    }
}

int hash(char * data, int size) {
  unsigned long hash = 5381;
  char * p;
  for (p = data; *p != '\0'; ++p) {
    hash = (hash * 33) + *p;
  }
  return (int)(hash % size);
}

void hashAdd(char * data, struct listnode * hashTable[], int …
Run Code Online (Sandbox Code Playgroud)

c free hash dynamic-memory-allocation

-2
推荐指数
1
解决办法
44
查看次数

在调用realloc()之前释放内存

关于我的代码,下面有一些混淆.

我使用malloc()分配内存,释放它,然后使用与参数相同的指针ptr调用realloc(),但不要使用realloc的返回地址.

此代码编译并运行精细打印预期的字符串.我没想到它因为ptr之前被释放了.

但是,如果我将realloc()的返回地址分配给ptr而不是注释掉,那么当然会出现运行时错误,因为ptr将为NULL.

如果我只是将之前释放的ptr作为参数传递,为什么它可以工作.它显然再次分配内存?提前致谢.

注意:此代码是故意编写的,目的只是为了尝试了解后台发生的情况.当然不建议取消引用悬空指针等.

#include <stdio.h>
#include <stdlib.h>

int main()
{
    char* ptr;
    ptr = (char*)malloc(20);

    strcpy(ptr, "Hello");

    printf("Address before free : %d\n", ptr);
    printf("%s\n", ptr);

    free (ptr);

    printf("Address after free  : %d\n", ptr);
    printf("%s\n", ptr);

    realloc(ptr, 30);

    //ptr = realloc(ptr, 30); // causes runtime problem as expected

    strcpy(ptr, "Hello");

    printf("Address after realloc  : %d\n", ptr);
    printf("%s\n", ptr);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c free pointers realloc dynamic-memory-allocation

-2
推荐指数
1
解决办法
558
查看次数

免费的C中未初始化的指针

如果我为指针动态分配了空间,请列出以下内容:

int *a = (int*)malloc(sizeof(int));
Run Code Online (Sandbox Code Playgroud)

代码完成后,我应该释放一个吗?谢谢!

c free

-2
推荐指数
1
解决办法
84
查看次数