我错过了什么?如果我想在单独的函数中增加计数器,为什么它会给我一个分段错误?
int point(int *cow);
int main()
{
int *cow = 0;
point(cow);
return(0);
}
int point(int *cow) {
(*cow)++;
return(0);
}
取消引用空指针是 C 语言中未定义的行为。
也许你想这样做:
int a = 0;
int *cow = &a;
point(cow);
请注意,临时指针cow
不是必需的,您可以直接将&a
传递给point
函数。
执行此操作的好方法是:
void point (int *cow);
int main () {
int cow = 0; // Create a simple int, not a pointer
point (&cow); // Pass address (&) of your int
return 0;
}
void point (int *cow) {
(*cow)++;
}
你不需要在你的主中有一个指针,只需将指针传递给你的增量函数。
您正在尝试取消引用空指针,这肯定会使您的程序崩溃。您可能打算这样做:
int point(int *cow);
int main()
{
int cow = 0;
point(&cow);
return(0);
}
int point(int *cow) {
(*cow)++;
return(0);
}
在原始代码中,您创建了一个指向 int 的指针(即:int* cow),但您从未实际创建一个 int 来存储您尝试递增的值。下面也是一个有效的示例,它将我上面的代码更改与您的原始代码相结合:
int point(int *cow);
int main()
{
int cow = 0;
int* pCow = &cow;
point(pCow);
return(0);
}
int point(int *cow) {
(*cow)++;
return(0);
}
祝你好运!
int *cow = 0;
将"cow"声明为指向整数的指针,然后将该指针的值赋值为零。然后将其传递给 point(),后者尝试取消引用"0",然后递增存储在该内存位置的任何值。
试试这个:
int x = 0;
int *cow = &x;
point(cow);
(定义来自wiki)分段错误(通常缩写为段错误),总线错误或访问冲突通常是尝试访问CPU无法物理寻址的内存。
int *cow = 0;
当程序尝试访问上面指出的内存时,您会收到分段错误,因为它不是有效的地址。