以下C代码返回“分段错误”错误。我不明白为什么它不返回值20.我的错误是什么?
#include <stdio.h>
int main()
{
int* n;
*n = 20;
printf("%i\n",*n);
return 0;
}
答案 0 :(得分:14)
您尚未将记忆分配给n
,所以
*n = 20;
尝试编写未指定的内存。
尝试
#include <stdlib.h>
int *n = malloc(sizeof *n);
/* use n */
free(n);
答案 1 :(得分:4)
您尚未为int
分配空间,您只是向int
声明了指针。
指针未初始化,因此写入内存中的未知空间是未定义的行为并导致问题。这通常会导致段错误。
您可以使用malloc
为整数分配一个插槽:
n = malloc(sizeof(int));
并使用相应的free
来调用以释放内存:
free(n);
但是为整数分配单个插槽是非常不寻常的,通常你会在堆栈上分配int
:
int n;
n = 20;
答案 2 :(得分:1)
您正在尝试将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