当我设置一个变量的值时,无法释放内存。

问题描述 投票:1回答:1

当我尝试释放内存时,我得到一个memallocation错误,但当我尝试释放内存而不定义名称时,它工作正常。

输入内容

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

void main()
{
    char* name = malloc(5 * sizeof(char));
    name = "Jeff";

    printf("%s",name);

    free(name); 
}

产量

0 [main] memallocation 1434 cygwin_exception::open_stackdumpfile: Dumping stack trace to memallocation.exe.stackdump
c memory memory-management heap-memory
1个回答
0
投票

你得到一个错误,因为你没有释放你认为的东西。

当你这样做时,

name = "Jeff";

你覆盖了从 malloc 与字符串常数的地址 "Jeff". 所以当你打电话 free 你传递给它的是字符串常量的地址。

复制字符串的正确方法是使用 strcpy 函数。

strcpy(name, "Jeff");

这将字符串复制到内存缓冲区返回的 malloc. 那么你可以放心地打电话 free 上。

© www.soinside.com 2019 - 2024. All rights reserved.