首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >munmap_chunk():无效指针

munmap_chunk():无效指针
EN

Stack Overflow用户
提问于 2015-08-20 12:40:35
回答 2查看 161.8K关注 0票数 60

我发现了我的程序中的错误,并决定写一个简单的错误,这将帮助我理解正在发生的事情。下面是:

代码语言:javascript
复制
#include <stdio.h>
#include <stdlib.h>

char * first()
{
    char * word = malloc(sizeof(char) * 10);
    word[0] = 'a';
    word[1] = 'b';
    word[2] = '\0';
    return word;
}

char * second ()
{
    char * word = malloc(sizeof(char) * 10);
    word = "ab";
    return word;
}

int main ()
{
    char * out = first();
    printf("%s", out);
    free(out);
    out = second();
    printf("%s", out);
    free(out);
    return 0;
}

first()函数工作正常,但是second() (确切地说是free(out) )出现了错误:

‘./a.out’:munmap_chunk()中的错误:无效指针: 0x0000000000400714 * ababAborted (内核转储)

我不明白为什么第一个函数是正确的,但是第二个功能不正确。有人能解释为什么吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-08-20 12:45:11

在函数second()中,赋值word = "ab";word分配一个新指针,覆盖通过malloc()获得的指针。稍后在指针上调用free()时,程序会崩溃,因为您将一个指向free()的指针传递给未通过malloc()获得的指针。

分配字符串文本不会像您想的那样复制它们的内容。若要复制字符串文本的内容,请使用strcpy()

代码语言:javascript
复制
strcpy(word, "ab");
票数 90
EN

Stack Overflow用户

发布于 2015-08-20 12:49:35

在函数char * second

代码语言:javascript
复制
 char * word = malloc(sizeof(char) * 10);
 word = "ab";

第二个语句word = "ab";word更改为远离已分配的memory.You,它没有将字符串"ab"复制到由malloc分配的堆区域。

对于free,没有由malloc或类似函数分配的内存会导致程序崩溃。

试图释放无效指针(指向没有由calloc、malloc或realloc分配的内存块的指针)可能会影响后续的分配请求并导致错误。

您应该按照其他人的建议在这里使用strcpy

票数 22
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32118545

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档