[英]C program, printf char* crashes
我有一个由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
您应该从函数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;
}
您忘记了从函数返回sommet
。
FWIW,任何期望返回一些值的函数,如果不return
值,并且该返回值在调用方中使用,它将调用未定义的行为 。
引用C11
,第§6.9.1章, 函数定义
如果到达终止函数的
}
,并且调用者使用了函数调用的值,则该行为未定义。
那就是
C
中malloc()
和family的返回值的讨论。 malloc()
是否成功。 sizeof(char)
在C中保证为1
将其用作乘法器是多余的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.