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

时间:2012-06-30 22:15:04

标签: c pointers segmentation-fault

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

#include <stdio.h>

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

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

    return 0;

}

3 个答案:

答案 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