在我的C ++程序中出现此错误是什么?

时间:2015-04-24 08:18:37

标签: c++

我编写了以下程序,将值(此处为3)设置到内存中某个位置,该位置由名为p的指针使用名为{{1}的函数指向并将其打印在f()

main

但是当我想编译它时,我收到了这个编译时错误:

#include <iostream>
using namespace std;

void f(float* q)
{
        q=new float;
        *q=3;
}

int main()
{
    float *p= nullptr;
    f(p);
    cout<<*p;
    return 0;
}

出了什么问题?

3 个答案:

答案 0 :(得分:2)

您的编译器似乎不支持指针文字nullptr。 您可以使用空指针常量。例如

float *p = 0;

但无论如何你的程序是错误的。它有内存泄漏,因为您将已分配内存的地址存储在函数f的局部变量中,该变量将在退出函数后被销毁。

该程序可以采用以下方式

#include <iostream>
using namespace std;

void f( float **q)
{
        *q = new float;
        **q = 3;
}

int main()
{
    float *p = 0;

    f( &p );

    cout << *p;

    delete p;

    return 0;
}

或者您可以使用对指针的引用。例如

#include <iostream>
using namespace std;

void f( float * &q)
{
        q = new float;
        *q = 3;
}

int main()
{
    float *p = 0;

    f( p );

    cout << *p;

    delete p;

    return 0;
}

答案 1 :(得分:1)

nullptr仅支持gcc-4.6或更高版本。

您可以使用const void *nullptr=(void*)0;轻松解决此问题,但为了避免以后出现gcc升级问题,我建议

  • 升级你的gcc(4.6很老)
  • 或者不使用它。

这只是语法糖,你不需要它。

答案 2 :(得分:-1)

C ++标准不保留单词null。

改为使用NULL。