标签: malloc

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
查看次数

Java程序员想要理解C++代码:使用没有new的对象的方法

我多年来一直在使用Java.现在我需要了解一个C++程序.

TimeStamp theTimeStamp;
theTimeStamp.update();
Run Code Online (Sandbox Code Playgroud)

令我困惑的是为什么我们不写

TimeStamp theTimeStamp = new(); 
Run Code Online (Sandbox Code Playgroud)

我的直觉是,要使用对象,应首先分配内存空间并将其与对象关联.

我想这是Java和C++从根本上有所不同的一点?你能澄清一下吗?

[EDIED]我写了'TimeStamp theTimeStamp = malloc();'

c++ malloc new-operator

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

使用包装函数调用Malloc

我在初学者班上帮助教C语言.我们讨论了使用malloc进行动态内存分配,并且学生想要在malloc周围放置一个包装器.我不确定这是否会有用,但玩弄东西是最好的学习方法.

然而,当学生试图通过他们的malloc包装函数为数组提供内存时,它不起作用 - 分段错误.

下面给出一个最小的例子.

#include <stdlib.h> 

void mallocWrapper(int *intArray, int length){

    intArray = malloc(length * sizeof(int));
}

int main() { 

    int *array;
    int arraySize = 10;

    mallocWrapper(array, arraySize);

    // this line causes the Segmentation fault  
    array[0] = 0;

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

据我所知,数组变量只会成为内存中为数组保留的第一个点的地址.我认为无论内存分配在哪里,即在main或mallocWrapper中都会出现这种情况.

结果我不知道该怎么告诉学生,除了我会回到他们身边.

任何帮助,将不胜感激.谢谢

c memory arrays malloc

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

为什么malloc在我的c程序中不起作用?

struct BOOK
{
    char name[120];
    char author[120];
    int  year[50];
};

int main (void)
{
    int          i;
    int          number;
    struct BOOK* books;

    number = 50000;

    printf("before \nsizeofbooks %d \n sizeofBOOK %d\n",
           sizeof(books), sizeof(struct BOOK));

    books = (struct BOOK*)malloc(sizeof(struct BOOK) * number);

    printf("sizeofbooks %d \n sizeofBOOK %d\n",
           sizeof(books), sizeof(struct BOOK));

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

输出是:

before
sizeofbooks 4
sizeofBOOK 440
after
sizeofbooks 4
sizeofBOOK 440
Run Code Online (Sandbox Code Playgroud)

它总是输出4,即使我写入不同的数组,但我希望它会改变.我究竟做错了什么?

我的操作系统是winxp 32位,我使用的是代码块.

c malloc sizeof

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

Malloc在C中返回Void

伙计我正在使用C编程,尝试动态分配类型char,如下所示:

char **word1 = malloc(sizeof(char *)* 1);
char **word2 = malloc(sizeof(char *) * 1);
Run Code Online (Sandbox Code Playgroud)

但它产生了一个错误:从'void*'无效转换为'char**'[-fpermissive]

谢谢每一个帮助我的人.

c malloc dynamic-allocation

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

动态(非静态)内存c ++?

创建具有未定义大小的数组的最佳方法是什么?我有数千个需要放入数组的措施.这些值由传感器提供.所以我最后才知道阵列的大小; 当传感器停止发射时.

我这样做

#define MAX_SIZE 100000000

double array[MAX_SIZE]
Run Code Online (Sandbox Code Playgroud)

但是,除了有比MAX_SIZE更多的度量之外,我从编译器获取此错误消息:: R_X86_64_32对.bss' __static_initialization_and_destruction_0':

是否有一种不具体的方式或强加指针的初始(静态)大小但让它自动增长?

谢谢你的帮助.

c++ memory arrays malloc

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

宏空白

请参阅以下代码

#include <stdio.h>
#include<stdlib.h>
#define MALLOC(n) malloc(n)
int main(void) {
    int *x = MALLOC (sizeof(int) * 10);
    x[0] = 20;x[9] =200;
    printf("%d %d\n",x[0],x[9]);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我应该打电话给MALLOC(sizeof(int) * 10)对吗?由于宏应该与调用匹配.即使我打电话给MALLOC (sizeof(int) * 10)我得到相同的输出是这个未定义的行为?或者我错过了什么?

在后MALLOC一个调用之后的空格是否被忽略了?

标准说当我们调用一个宏时,它的确切文本表示被替换不是这里的情况吗?

c malloc

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

2种免费通话方式 - 有区别吗?

free在堆上分配内存后,这两种调用变量之间是否存在差异:

// variant 1
int* p1 = (int*) malloc(sizeof(int)*4);
free(p1);

//variant 2
int* p2 = (int*) malloc(sizeof(int)*4);
free(*p2);
*p2 = NULL;
Run Code Online (Sandbox Code Playgroud)

c heap malloc free pointers

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

标签 统计

malloc ×10

c ×8

free ×4

c++ ×3

memory ×3

arrays ×2

dynamic-allocation ×1

heap ×1

new-operator ×1

pointers ×1

sizeof ×1

std ×1