我编写了以下程序,将值(此处为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;
}
出了什么问题?
答案 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升级问题,我建议
这只是语法糖,你不需要它。
答案 2 :(得分:-1)
C ++标准不保留单词null。
改为使用NULL。