簡體   English   中英

帶有結構的程序中的錯誤-分段錯誤

[英]Error in the program with structures -segmentation fault

    #include <stdio.h>

    struct p

    {
        char *name;
        struct p *next;
    };

    struct p *ptrary[10];

    int main()
    {
        struct p p, q;
        p.name = "xyz";
        p.next = NULL;
        ptrary[0] = &p;
        strcpy(q.name, p.name);
        ptrary[1] = &q;
        printf("%s\n", ptrary[1]->name);
        return 0;
    }

該程序在執行時出現分段錯誤。 怎么了 我是否需要為記憶分配內存?

使用前,您必須分配一些內存。

q.name = malloc(10);
strcpy(q.name, p.name);

編輯:作為正確的指針,通過unwind, sizeof char將始終為1。因此從malloc刪除。

在使用strcpy()之前,您需要為字符串分配空間。 您正在嘗試將新字符串復制到內存中,該內存中包含從字符串文字初始化的字符串,這完全無效。 此類字符串應被視為只讀。

您可以通過復制指針來避免此問題,該指針隨后將復制由字符串文字創建的字符串:

q.name = p.name;
struct p
{
    char *name;  //name points nowhere
    struct p *next;
};

strcpy(q.name, p.name); // q.name is any arbitrary value

在使用內存之前,先為其分配name

或聲明為:

struct p
{
    char name[4];  //the number of characters you require
    struct p *next;
};
#include <stdio.h>

    struct p

    {
        char name[10];
        struct p *next;
    };

    struct p *ptrary[10];

    int main()
    {
        struct p p, q;
        strcpy(p.name , "xyz");
        p.next = NULL;
        ptrary[0] = &p;
        strcpy(q.name, p.name);
        ptrary[1] = &q;
        printf("%s\n", ptrary[1]->name);
        return 0;
    }

或者您可以使用p.name = malloc(sizeof(char)*10);

暫無
暫無

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

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