尝试在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