0

以下代码在 ideone 中运行良好,但在 codeblocks IDE 中出现运行时错误。我的 IDE 是否损坏或是否存在任何特定于编程语言的问题。

#include<stdio.h>

int main(){
    int *pointer;
    int num = 45;
    *pointer = num;
    printf("pointer points to value %d", *pointer);
    return 0;
}
4

4 回答 4

8

替换这个

*pointer = num;

经过

pointer = &num;

在为其赋值之前,您的指针应该指向一个内存空间。

当您以这种方式定义指针时:

int *pointer;

这意味着您已经定义了指针,但指针尚未指向内存空间。如果您直接使用指针而不将其指向内存空间(就像您在代码中所做的那样),那么您将获得未定义的行为

将指针指向内存空间可以通过以下方式之一完成:

1) 指向一个静态内存

int num;
int *pointer = &num;

num 是一个定义为静态的 int。所以指针可以指向num内存

2)指向动态内存

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

指针可以指向动态内存。可以分配动态内存malloc(),当内存变得无用时,我们可以释放内存free(pointer)

于 2013-02-04T12:50:26.450 回答
1

将 num 的地址分配给指针,因为指针应该保存地址而不是值。您可以在此处阅读有关指针的更多信息

pointer = &num;

通过指针改变变量的值

*pointer = 11;
于 2013-02-04T12:50:48.767 回答
1

首先,您已经通过“int *pointer”定义了一个指针。

然后,尝试使用“*pointer = num”来实现间接访问——将num的值赋给指针“pointer”所指向的内存空间。

好的,问题来了!从你的代码中,你只定义了一个指针,但你没有让它指向一个内存空间。不这样做就进行间接访问是非常危险的。因此,您会看到运行时错误。

现在,您应该添加“int value;pointer = &value;” 到你的代码。它将使指针“指针”指向“值”。您可以通过间接访问“*pointer = num”将“num”分配给“value”。

在我看来,学习指针的时候应该区分定义和间接访问。

我是一个英语很差的人。这是我在堆栈溢出中的第一个答案。希望我的回答可以帮助到你。谢谢你。

于 2013-02-04T14:43:01.147 回答
-1

首先你应该初始化它试图指向的指针,然后用它来修改指向的值..as...

pointer=&num;

现在使用指针来改变或访问它所指向的值。

于 2013-02-04T12:53:35.140 回答