以下 C 代码返回“分段错误”错误。我不明白为什么它不返回值 20。我的错误是什么?
#include <stdio.h>
int main()
{
int* n;
*n = 20;
printf("%i\n",*n);
return 0;
}
以下 C 代码返回“分段错误”错误。我不明白为什么它不返回值 20。我的错误是什么?
#include <stdio.h>
int main()
{
int* n;
*n = 20;
printf("%i\n",*n);
return 0;
}
你还没有分配内存n
,所以
*n = 20;
尝试写入未指定的内存。
尝试
#include <stdlib.h>
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