我试图将地址作为参数传递给练习过程。它没有用,所以我用这个简单的例子来找出错误:
int main(int argc, const char * argv[]) {
int newCounter = 0; // I want to get the value of this using its address
int *address; // The pointer
printf("%p\n", &newCounter); // Printing the address
scanf("%p", address); // We insert the address manually
printf("%d\n", *address);
}
当我运行此程序时,在手动插入Segmentation fault: 11
地址并按Enter键后,我收到一条消息newCounter
,是否有人知道此代码有什么问题?
答案 0 :(得分:1)
在scanf()
中,您必须将指针传递到您希望存储结果的位置。你应该这样:
scanf("%p", &address);
(注意使用&
)。您正在获得段错误,因为scanf()
假定您传递的参数是指向可以存储结果的有效内存位置的指针。
另外,scanf()
只能阅读void *
指针 - 您需要将address
的声明更改为void *
:
void *address; // The pointer
并注意这一点:
printf("%d\n", *address);
您如何确保您输入的地址有效?这很可能会崩溃。