C 赛格。打印字符时出错
有什么原因导致这个代码不起作用吗C 赛格。打印字符时出错,c,C,有什么原因导致这个代码不起作用吗 char* toString(struct number *this) { char *res; if (!this) { res = malloc(sizeof(char)); *res = '\0'; return res; } */ other working code */ } 当我尝试使用printf打印时,会出现“分段错误”: char *s = toString(NULL); pr
char* toString(struct number *this) {
char *res;
if (!this) {
res = malloc(sizeof(char));
*res = '\0';
return res;
}
*/
other working code
*/
}
当我尝试使用printf打印时,会出现“分段错误”:
char *s = toString(NULL);
printf("%s\n", s);
谢谢。如果
malloc(1)
失败,引用的代码将崩溃。我看不出还有其他原因。请再添加一些代码
无论如何,只需使用调试器(gdb)。让它崩溃并找到原因…我打赌原始源代码看起来像这样:
struct number
{
int i;
}
int main()
{
char * s = toString(NULL);
printf("%s\n", s);
return 0;
}
char * toString(struct number * this)
{
char *res;
if (!this) {
res = malloc(sizeof(char));
*res = '\0';
return res;
}
/*
other working code
*/
}
如果是这种情况,则在main()
之前添加此原型:
和:从现在开始始终在all警告打开的情况下编译,以避免以后再次发生这种情况…:-) 对我有效,但我没有看到任何UB。(我假设第一个
*/
只是一个打字错误,或者它甚至不会编译)。@Jayram,内存泄漏不会导致seg错误。如果您将main
声明为void
或int
并且没有返回任何内容,则可能会导致它(如果编译为c89)可能是printf实现不喜欢打印空字符串。什么编译器/操作系统?在这种情况下,返回NULL
不是更明智吗?只是想知道。
char * toString(struct number *this);