Tag: malloc

使用free()释放内存不起作用

这是一个小程序,它填充一些数组并在屏幕上打印其内容: #include #include typedef struct{ double **plist; int plistSize; } ParticleList; void sendPar(int *n, int np){ // allocate memory for struct pl ParticleList pl; // allocate memory for ParticleList np times pl.plist = malloc(sizeof(ParticleList) * np); // allocate memory for lists of size n[k] for(int k=0; k<np; k++){ pl.plist[k] = malloc(sizeof(double) * n[k]); } // […]

检查指针是否在malloc’d区域?

我正在制作一个动态内存分配器,我需要检查,而不是当我释放它的一部分时,我传入函数的指针实际上是在该区域内。 我有一个指向malloc’d区域开头的指针 typedef unsigned char byte; static byte *memory // pointer to start of allocator memory 我在启动函数中分配的。 我也存储了malloc’d区域的大小 static u_int33_t memory_size; // number of bytes malloc’d in memory[] 我如何确保ptr不…(伪代码) ptr *memory + memory_size 并且该代码导致以下错误; 错误:不同指针类型的比较缺少强制转换[-Werror] if(object (memory + memory_size))^ 我不确定我需要投出什么以及什么不… 免费function如下…… void memfree(void *object) { if ( object (memory + memory_size)) { fprintf(stderr, “vlad_free: Attempt […]

我在结构指针上调用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 […]

基本C指针分配/释放

使用GNU的GSL库编写C代码,从未正式学习任何代码,快速基本问题。 纠正我,如果我错了,但是我理解它的方式,当我分配内存用于我的矩阵(使用内置的var = gsl_matrix_alloc(x,x) )并将它们存储在变量中时,我基本上是创建一个指针,它只是一些内存地址,如:x01234749162 它指向我的GSL矩阵的第一个指针/内存位置。 跟踪何时释放与指针相关联的结构的内存(同样,内置gsl_matrix_free(x,x,x) )是没有问题的,我知道我需要在重新分配结构的指针之前执行此操作,否则我创造了一个内存泄漏。 所以现在我的问题,再次,我知道这是基本的,但听到我 – 我无法在stackoverflow上找到一个特别直接的答案,主要是因为很多答案涉及C ++而不是C – 我怎么做释放指向结构本身的指针? 每个人都说“哦,只需将其设置为NULL”。 为什么会这样? 这只是将POINTS的内存地址更改为解除分配的结构。 这是否告诉MMU现在可以使用该内存位置? 例如,当我在XCode中调试程序时,gsl_matrix结构的所有属性都被成功释放; 一切都变成了这个随机hex字符的垃圾串,这就是自由存储应该做的事情。 但是,我仍然可以通过调试器看到变量名(指针)…即使我将变量设置为NULL。 我会解释这意味着我没有释放指针,我只是释放了结构并将其设置为x0000000(NULL)。 我做的一切都是正确的,这只是XCode的一个特性,还是我遗漏了一些基本的东西? 我意识到,如果结构被解除分配,单个指向结构的指针可能会被认为不是什么大问题,但它很重要。 这是一些试图说明我的想法的代码。 gsl_matrix* my_matrix; // create single memory address in memory, not pointing to anything yet my_matrix = gsl_matrix_alloc(5, 5); // allocates 25 memory spaces for the values that the pointer held […]

应该何时使用动态内存分配函数与直接变量声明?

以下是直接变量声明的示例。 double multiplyByTwo (double input) { double twice = input * 2.0; return twice; } 下面是动态内存分配的示例。 double *multiplyByTwo (double *input) { double *twice = malloc(sizeof(double)); *twice = *input * 2.0; return twice; } 如果我有一个选择,我会一直使用直接变量声明,因为代码看起来更具可读性。 什么时候动态内存分配更合适?

realloc给出错误 – 下一个大小无效

#include #include #include int temp; int main() { FILE * fp; fp = fopen(“input2.txt”, “r”); //Open the input int counter = 0; int realloc_counter = 10; int *line_array; //Initialize the array line_array = malloc(10 * sizeof(int)); //Allocate memory for initial ten numbers, of size int for each while (fscanf(fp, “%d”, &temp) > 0) { line_array[counter] […]

C Sysmalloc断言失败

我在运行C程序时收到以下sysmalloc错误。 malloc.c:3096: sYSMALLOc: Assertion `(old_top == (((mbinptr) (((char *) &((av)->bins[((1) – 1) * 2])) – __builtin_offsetof (struct malloc_chunk, fd)))) && old_size == 0) || ((unsigned long) (old_size) >= (unsigned long) ((((__builtin_offsetof (struct malloc_chunk, fd_nextsize)) +((2 * (sizeof(size_t))) – 1)) & ~((2 * (sizeof(size_t))) – 1))) && ((old_top)->size & 0x1) && ((unsigned long)old_end & pagemask) == […]

设置一个新的自变量会改变c中的所有其他变量

我真的不知道哪个标题更适合描述我的问题。 我通过VirtualBox使用Linux。 我正在使用gcc编译器。 到目前为止,我一直在编写代码(300行),没有类似的问题。 突然间,如果我输入一个新变量并设置一个值,我代码中的其他变量就会改变它们的值。 我想知道我是否需要清理记忆或其他东西。 do { rand_arr = rpermute(dim_x * dim_y); flag = 0; for (t = 0; t < (dim_x * dim_y); t++) { x = rand_arr[t] / dim_x; y = rand_arr[t] % dim_x; if (arr[x][y] == 255) { current_distance = sqrt(pow(exit[0][0] – x, 2) + pow(exit[0][1] – y, 2)); if (x […]

覆盖malloc以记录分配大小

我正在尝试使用一些代码在tcpdump中为我的项目记录mallocs,我正在使用的代码是: #include unsigned int memCount = 0; void *my_malloc(size_t size) { void *p = malloc(size); memCount = memCount + size; printf(“Memory Allocated :%u \n”, size return p; } #define malloc(size) my_malloc(size) 在网上查看了许多类似的问题后,似乎这应该可行,但是我的自定义malloc似乎没有被调用。 任何帮助将不胜感激,谢谢!

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结构丢失值?