12

我对 C 很陌生,但不知道为什么这个程序会中断。如果我删除与 相关的行,程序将编译并运行i,但如果我分配i,我将无法再分配任何东西而*ptr不会破坏程序。

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

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

4 回答 4

11

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

通过将变量的地址(如)或一些新分配的内存(如)分配给自身(而不是)来指向ptr某物。ptr*ptr&imalloc(sizeof(int))

于 2012-07-02T16:30:22.707 回答
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
}

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

于 2012-07-02T16:31:31.260 回答
1

你声明了 ptr 但没有让它指向任何东西。然后,您尝试写入它指向的内容。这从来都不是一个好主意。尝试通过添加行使 ptr 指向 i

ptr = &i;

在您尝试写入 *ptr 之前

于 2012-07-02T16:31:35.973 回答
0

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

int *ptr = (int *)malloc(sizeof(int));
于 2012-07-02T16:30:00.370 回答