标签: free

在c ++中分配和释放char*

嘿大家,我得到一堆腐败错误,我无法弄清楚.

char * c = (char *) malloc(1);
// main loop
_gcvt_s(c, 100, ball->get_X_Direction(), 10);
      if(pushFont(c, (SCREEN_WIDTH - 30), (SCREEN_HEIGHT - 40), message, screen,
font, textColor) == false)
      {
           //return 1; // error rendering text.
      }
// end main loop
free(c);
Run Code Online (Sandbox Code Playgroud)

上面的代码是我在_gcvt_s和pushFont()中使用c指针的唯一时间,它只接受char*作为其第一个参数,并将文本放在屏幕上.除此之外,我不使用c.当我尝试在主循环之后释放c(我认为我应该这样做)时,我得到一个错误,说Visual Studio已经获得了堆的错误(堆损坏).

注释掉对pushFont的调用我仍然收到错误.

任何人都可以向我解释为什么释放一个字符(我在堆上分配的1个字节)会给我一个堆损坏?

最后我的主循环做了很多东西,一个伙伴和我正在用WinSocket做一个乒乓球游戏,主体的其余部分是游戏的循环.我不认为有必要发帖,但如果有必要,我会用整个主循环更新我的帖子,但我相信我对malloc()和free()的理解是对的.

谢谢大家,

c++ heap malloc free

0
推荐指数
1
解决办法
2013
查看次数

c免费问题

这可以在c中做吗?

int *i;
// do stuff

i = NULL;

i = (int *) some_func();
// do stuff

if (i != NULL)
    free(i);

i = NULL;

// do stuff
i = (int *) some_func();
// do stuff
if (i != NULL)
    free(i);

i = NULL;
Run Code Online (Sandbox Code Playgroud)

c memory free

0
推荐指数
1
解决办法
241
查看次数

在ipad/iphone应用中使用众所周知的免费内存代码是否合法?

内存是iphone ipad应用程序的一个问题,特别是对于ipad,如果想要做一些大事.

那么,这两个代码片段可以1.获得设备的当前可用内存; 2.强制释放记忆.

我们可以在应用程序中使用它吗?appstore会允许吗?

#import <mach/mach.h>
#import <mach/mach_host.h>

static void print_free_memory () {
mach_port_t host_port;
mach_msg_type_number_t host_size;
vm_size_t pagesize;

host_port = mach_host_self();
host_size = sizeof(vm_statistics_data_t) / sizeof(integer_t);
host_page_size(host_port, &pagesize); 

vm_statistics_data_t vm_stat;

if (host_statistics(host_port, HOST_VM_INFO, (host_info_t)&vm_stat, &host_size) != KERN_SUCCESS)
NSLog(@"Failed to fetch vm statistics");

/* Stats in bytes */ 
natural_t mem_used = (vm_stat.active_count +
vm_stat.inactive_count +
vm_stat.wire_count) * pagesize;
natural_t mem_free = vm_stat.free_count * pagesize;
natural_t mem_total = mem_used + mem_free;
NSLog(@"used: %u free: %u total: %u", mem_used, mem_free, mem_total); …
Run Code Online (Sandbox Code Playgroud)

memory free ios

0
推荐指数
2
解决办法
6625
查看次数

错误:free():下一个大小无效(快)

当我在这部分代码中释放我的记忆时...我收到一个错误显示为:free():无效的下一个大小(快)

int insertRecord(char *record,int recordSize,long dataPageNumber)
{
datapage *dataPage=(datapage *)malloc(sizeof(datapage));
readPage(dataPage,dataPageNumber);

slotentry slot;

//for checking and freeslotnumber storage
int freeSlotNumber=-1;
int negativeFlag=0;
int freeFlag=0;

if(recordSize+sizeof(slotentry)<=dataPage->cfs)
{
    slot.slotsize = recordSize;
    slot.slotaddress = dataPage->cfsptr;
    dataPage->cfs -= (recordSize+sizeof(slotentry));
    dataPage->cfsptr += recordSize;
    dataPage->slotcount++;

    memcpy(&dataPage->data[slot.slotaddress],record,recordSize);

    free(dataPage);
    return 1;
}
Run Code Online (Sandbox Code Playgroud)

执行free(dataPage)后,我收到上述错误...

typedef struct
{
   int pagenumber;
   int priority;
   long dirPageNo;
   long cfs;
   int cfsptr;
   int slotcount;
   char data[1];
} datapage;

typedef struct
{
   int slotaddress;
   int slotsize;
} slotentry;
Run Code Online (Sandbox Code Playgroud)

我在memcpy之前保持free(dataPage)它工作正常但是在memcpy之后它没有工作..并显示错误....任何人都可以帮助我解决这个问题...

c free struct memcpy data-structures

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

为什么内存在我的C反向列表功能中泄露?

我对Pointers和内存模型相当新,所以如果这很明显,请原谅我,但我正在编写一个程序来测试反转列表的函数反转.无论如何,我有三个文件,C5.c,C5-driver.c和C5.h. 他们按顺序在这里:

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

struct node *cons(int fst, struct node *rst) {
    struct node *new = malloc(sizeof(struct node));
    if (new == NULL) {
        printf("cons: out of memory\n");
        abort();
    }
    (*new).first = fst; /* same as (*new).first = fst */
    (*new).rest = rst;
    return new;
}

struct node *reverse(struct node *lst) {
    struct node *ans = NULL;
    while (lst != NULL) {
        ans = cons((*lst).first, ans);
        lst = (*lst).rest;
    }    
    return ans;
}

void free_list(struct node *lst) …
Run Code Online (Sandbox Code Playgroud)

c memory malloc free memory-leaks

0
推荐指数
1
解决办法
98
查看次数

C中自由的奇怪(未定义?)行为

这真的很奇怪......我无法调试它(尝试了大约两个小时,调试器在一段时间后开始变得干扰...).无论如何,我正在尝试做一些非常简单的事情:

Free an array of strings.该数组的形式如下:

char **myStrings.数组元素初始化为:

myString[index] = malloc(strlen(word));
myString[index] = word;
Run Code Online (Sandbox Code Playgroud)

我正在调用这样的函数:

free_memory(myStrings, size); 其中size是数组的长度(我知道这不是问题,我对它进行了广泛的测试,除了这个函数之外的所有东西都在工作).

free_memory 看起来像这样:

void free_memory(char **list, int size) {

    for (int i = 0; i < size; i ++) {
        free(list[i]);
    }

    free(list);
}
Run Code Online (Sandbox Code Playgroud)

现在这里出现了奇怪的部分.if (size> strlen(list[i]))然后程序崩溃了.例如,假设我有一个类似于下面的字符串列表:

myStrings[0] = "Some";
myStrings[1] = "random";
myStrings[2] = "strings";
Run Code Online (Sandbox Code Playgroud)

因此这个数组的长度是3.

如果我把它传递给我的free_memory函数,strlen(myStrings[0]) > 3(4> 3),程序崩溃了.

然而,如果我改变myStrings[0]"So"代替,然后strlen(myStrings[0]) < 3(2 …

c arrays free undefined-behavior

0
推荐指数
1
解决办法
859
查看次数

释放使用calloc创建的数组时中止(核心转储)

这个

#include <stdlib.h> // test.c

int main()
{
    double *arr = (double*) calloc(1000, sizeof(arr));
    for (int i = 0; i < 1000; i++)
        arr[i] = 1; 
    free(arr);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

编译为

gcc test.c -std=c99 -o test
Run Code Online (Sandbox Code Playgroud)

Aborted (core dumped)在Cygwin上运行时生成输出./test.exe.

程序退出时,罚款我宣布int *arr(甚至同时保持(double *)施法),或者当我更新arr[0]的替代arr[i].是什么赋予了?

c free calloc

0
推荐指数
1
解决办法
488
查看次数

在struct上使用malloc的c

我正在尝试在名为image的结构上使用malloc.功能是:

void image_init(struct image* img, int w, int h) {
    img = malloc(sizeof(struct image));
    (*img).w = w;
    (*img).h = h;
}
Run Code Online (Sandbox Code Playgroud)

并且再次释放图像的功能是:

void image_destroy(struct image* img) {
    free(img);
}
Run Code Online (Sandbox Code Playgroud)

但每当我试图释放malloc-ed数据时,我都会收到错误,即我试图释放的地址之前没有进行过malloc-ed.

图像结构是:

struct image {
    int w,h;
    int* data;
}
Run Code Online (Sandbox Code Playgroud)

我用以下函数调用函数:

struct image img;
image_init(&img,100,100);
image_destroy(&img);
Run Code Online (Sandbox Code Playgroud)

c malloc free struct pointers

0
推荐指数
1
解决办法
146
查看次数

无法释放char指针内存c

我有个问题.我正在为a分配空间char*,但是当我尝试free这个空间时,我的程序崩溃了.

这是代码

fullPath = (char *) malloc(strlen(path) + strlen(fileData->d_name) + 1);
if (fullPath == NULL)
{
    handleErrors(ERR_ALOCATION_CODE);
}
sprintf(fullPath, "%s/%s", path, fileData->d_name);
//... some more code, I only use fullPath, I don't change it here
free(fullPath);
Run Code Online (Sandbox Code Playgroud)

上面的代码在尝试时失败了free.我将不胜感激.

c free memory-management

0
推荐指数
1
解决办法
336
查看次数

释放C中的结构还会删除其成员吗?

我是C语言的新手,我对分配内存有疑问。因此,我在下面尝试了应释放结构elem1的这段代码。

struct elem{

    char *data1;
    char *data2;

};

int main()
{

    struct elem *elem1 = malloc(sizeof(struct elem));
    elem1->data1 = "abc";
    elem1->data2 = "def";
    char *a = elem1->data1;
    char *b = elem1->data2;
    free(elem1);

    printf("%s\n%s\n",a,b);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

该代码可以很好地编译并返回,

abc 
def
Run Code Online (Sandbox Code Playgroud)

我希望它会失败,因为免费还应该释放其成员的记忆。但是为什么行得通呢?释放结构后,如果我想访问结构的成员该怎么办?

c malloc free

0
推荐指数
2
解决办法
122
查看次数