簡體   English   中英

使用 malloc function 時出現“分段錯誤(核心轉儲)”錯誤

[英]“Segmentation fault (core dumped)” error when using malloc function

使用 malloc function 時出現“Segmentation fault (core dumped)”錯誤。 我了解到malloc的初始化值是用垃圾memory填充的。 這部分是否出現Segmentation fault錯誤?

#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. 不要使用全局變量在函數之間傳遞數據。 使用 function 參數
  3. 你不必sizeof(char)因為它是定義 1
  4. 始終檢查 malloc 的結果
  5. 不要使用gets而是使用fgets
  6. 始終檢查 scanf 的結果。
  7. scanf中,將指針傳遞給 object 而不是 object 本身。
  8. 檢查可能失敗的 function 的結果 ( 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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM