我一直试图释放通过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函数.
最开始声明一个大小为50000的char数组(50000字节).假设这是堆内存,编写malloc和free函数来分配内存块并释放内存.
任何人都可以为我提供C++工作/伪代码或只是解释机制?(显然代码会让它更容易理解).
谢谢,罗希特
在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
我多年来一直在使用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进行动态内存分配,并且学生想要在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中都会出现这种情况.
结果我不知道该怎么告诉学生,除了我会回到他们身边.
任何帮助,将不胜感激.谢谢
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编程,尝试动态分配类型char,如下所示:
char **word1 = malloc(sizeof(char *)* 1);
char **word2 = malloc(sizeof(char *) * 1);
Run Code Online (Sandbox Code Playgroud)
但它产生了一个错误:从'void*'无效转换为'char**'[-fpermissive]
谢谢每一个帮助我的人.
创建具有未定义大小的数组的最佳方法是什么?我有数千个需要放入数组的措施.这些值由传感器提供.所以我最后才知道阵列的大小; 当传感器停止发射时.
我这样做
#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':
是否有一种不具体的方式或强加指针的初始(静态)大小但让它自动增长?
谢谢你的帮助.
请参阅以下代码
#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一个调用之后的空格是否被忽略了?
标准说当我们调用一个宏时,它的确切文本表示被替换不是这里的情况吗?
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)