尝试在C中打印值时出现分段错误

以下C代码返回“分段错误”错误。 我不明白为什么它不返回值20.我的错误是什么?

#include  int main() { int* n; *n = 20; printf("%i\n",*n); return 0; } 

你没有为n分配内存,所以

 *n = 20; 

试图写出未指定的内存。

尝试

 #include  int *n = malloc(sizeof *n); /* use n */ free(n); 

你还没有为int分配空间,你只声明了一个指向 int指针

指针未初始化,因此写入内存中的未知空间是未定义的行为并导致问题。 这通常会导致段错误。

您可以使用malloc为整数分配一个槽:

 n = malloc(sizeof(int)); 

并使用相应的调用来free以后释放内存:

 free(n); 

但是为整数分配单个槽是很不寻常的,通常你会在堆栈上分配int

 int n; n = 20; 

你正在尝试用垃圾值写20 。 您必须使用*alloc()函数之一为其分配空间,或者在堆栈上创建一个int并获取它的内容(正如Richard J. Ross III在评论中提到的那样)。

动态分配:

 int n*; n = malloc(sizeof(int)); /* allocate space for an int */ if(n != NULL) { /* do something.. */ free(n); /* free 'n' */ } else { /*No space available. */ } 

或在堆栈上:

 int int_on_stack; int *n = &int_on_stack; *n = 20; printf("%i\n", *n); // 20