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);