C - 使用 malloc 函数时出现"Segmentation fault (core dumped)"错误



;分段故障(堆芯倾倒(";使用malloc函数时发生错误。我了解到malloc的初始化值充满了垃圾内存。该部分是否出现分段故障错误?

#include <stdio.h>
#include <stdlib.h>
int chnum;
char *getstr(void)
{
    char *str1 = (char *)malloc(sizeof(char) * chnum);
    printf("Write a string: ");
    gets(str1);
    return str1;
}
int main(void)
{
    printf("What is the maximum length of a string? ");
    scanf("%d",chnum);
    char *set = getstr();
    printf("string : %s n",set);
    free(set);
    return 0;
}
  1. malloc的铸造结果被认为是一种糟糕的做法
  2. 不要使用全局变量在函数之间传递数据。使用它的函数参数
  3. 您不必像定义1那样sizeof(char)
  4. 始终检查malloc的结果
  5. 不使用gets而使用fgets
  6. 始终检查scanf的结果
  7. scanf中,将指针传递给对象,而不是对象本身
  8. 可能失败的功能的检查结果(getstr(
#include <stdio.h>
#include <stdlib.h>
char *getstr(size_t chnum)
{
    char *str1 = malloc(chnum);
    if(str1)
    {
        printf("Write a string: ");
        fgets(str1, chnum, stdin);
        printf("n");
    }
    return str1;
}
int main(void)
{
    size_t chnum;
    printf("What is the maximum length of a string? ");
    if(scanf("%zu", &chnum) == 1)
    {
        printf("n");
        fgetc(stdin);
        char *str = getstr(chnum);
        if(str) 
        {
            printf("string : %s n",str);
            free(str);
        }
    }
    return 0;
}

最新更新