C语言 分段错误,递增指针中的值



我错过了什么?如果我想在单独的函数中增加计数器,为什么它会给我一个分段错误?

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;

当程序尝试访问上面指出的内存时,您会收到分段错误,因为它不是有效的地址。

相关内容

  • 没有找到相关文章

最新更新