7

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

#include <stdio.h>

int main() 
{
    int* n;
    *n = 20;

    printf("%i\n",*n);

    return 0;

}
4

3 回答 3

16

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

*n = 20;

尝试写入未指定的内存。

尝试

#include <stdlib.h>

int *n = malloc(sizeof *n);
/* use n */
free(n);
于 2012-06-30T22:17:20.400 回答
5

您还没有为您的 分配空间int,您只声明了一个指向int.

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

您可以使用以下方法为整数分配一个槽malloc

n = malloc(sizeof(int));

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

free(n);

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

int n;
n = 20;
于 2012-06-30T22:17:17.460 回答
2

您正在尝试写入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
于 2012-06-30T22:19:19.043 回答