我有一个简单的C程序,像这样分配char指针和malloc

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

int main()
{
    char str[] = "0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789";
    char* str1 = malloc(sizeof(char*));
    strcpy(str1, str);
    printf("%s\n\n", str1);

    char* str2 = malloc(sizeof(char*));
    str2 = str1;
    printf("%s\n", str2);

    return 0;
}


结果是:

0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789

0123456789 0123456789 01!


那么,为什么str2只能从str1获得25个字符?而“!”在哪里? (在str2的末尾)来自哪里?

你可以帮帮我吗?
谢谢!

最佳答案

您没有分配足够的空间。 sizeof(char *)是保存指针所需的内存量(与该指针指向的位置无关)。

将两个malloc都更改为:malloc(sizeof str)malloc(strlen(str) + 1)

另外,str2 = str1会导致内存泄漏。它使指针str2指向str1所指向的位置,然后您拥有了该malloc块,而没有指向它的指针。

在原始代码中,当您不拥有内存时,任何事情都会发生;尝试确切地调查为什么得到某些特定垃圾而不是某些其他特定垃圾并没有什么用。

09-25 21:26