C程序,printf char *崩溃

时间:2017-01-07 15:51:45

标签: c string

我有一个由char*和许多属性组成的结构。

我无法将char*打印为字符串,它只会崩溃。

这是我的代码:

int main() {
    sommet_t* sommet = creerSommet("rouge", 5, NULL);
    printf("Couleur : %s", sommet->couleur);
    return 0;
}

我的sommet.c:

sommet_t* creerSommet(char* couleur, int distance, sommet_t* pere) {
    sommet_t* sommet =  malloc(sizeof(sommet_t));
    sommet->distance = distance;
    sommet->couleur = (char*)malloc((strlen(couleur)+1) * sizeof(char));
    strcpy(sommet->couleur,couleur);
    sommet->pere = pere;
}

我绝对不知道其中有什么错误。

编辑:sommet.h

#ifndef __SOMMET_H__
#define __SOMMET_H__

typedef struct sommet_type {
    char *couleur;
    int distance;
    struct sommet_type *pere;
} sommet_t;

sommet_t* creerSommet(char*, int, sommet_t*);

#endif

2 个答案:

答案 0 :(得分:3)

您应该从函数creerSommet

返回对象
sommet_t* creerSommet(char* couleur, int distance, sommet_t* pere) {
    sommet_t* sommet =  malloc(sizeof(sommet_t));
    sommet->distance = distance;
    sommet->couleur = (char*)malloc((strlen(couleur)+1) * sizeof(char));
    strcpy(sommet->couleur,couleur);
    sommet->pere = pere;
    return sommet;
}

答案 1 :(得分:1)

您忘记从函数返回sommet

FWIW,任何预期返回某个值的函数,如果不是return一个值,并且返回值在调用者中使用,则调用undefined behavior

引用C11,章节§6.9.1,功能定义

  

如果到达了终止函数的},则使用函数调用的值   调用者,行为未定义。

那就是说,