无法为变量和指针赋值

时间:2012-07-02 16:27:23

标签: c pointers

  

可能重复:
  Segmentation Fault when attempting to print value in C

我对C很新,但不知道为什么这个程序会破坏。如果我删除与i有关的行,程序将编译并运行,但如果我指定i,我将无法在没有程序中断的情况下向*ptr分配任何内容。

int main(void)
{
    int i;
    int *ptr;

    i = 2;
    *ptr = 5;
    printf("%d",*ptr);
}

4 个答案:

答案 0 :(得分:11)

您将指针保留为未初始化的值。因此,当您取消引用它(*ptr)时,您将访问内存中的任意位置,从而导致分段错误。

通过为ptr本身(不是ptr)分配变量的地址(如*ptr)或一些新分配的内存(如{{{{{{{ 1}})。

答案 1 :(得分:4)

以下是C的答案:

int main(void) {
    int i;
    int * ptr = (int *)malloc(sizeof(int));

    i = 2;
    *ptr = 5;     
    printfn("%d",*ptr); 
    free(ptr);
}

或者你可以为i和* ptr赋值行使用类似的东西:

int main(void) {
    int i;
    int * ptr;

    i = 2;
    ptr = &i;     
    printfn("%d",*ptr); // should print 2
}

另请注意,免费出来!!!

答案 2 :(得分:1)

你宣布ptr但没有指出任何事情。然后你试着写下它指向的内容。这绝不是一个好主意。尝试通过添加行

使ptr指向i
ptr = &i;

在您尝试写入* ptr

之前

答案 3 :(得分:0)

在C中使用指针之前,您需要将指针设置为现有的内存块,您需要为它分配内存,就像这样。

int *ptr = (int *)malloc(sizeof(int));