[英]changing a value of a class pointer in const Class function gives an error in some compiler but not others
我有下面的代碼,它在某些編譯器中給出了“分段錯誤”的錯誤,但對於其他編譯器,它給出的“40”為 output。 為什么有區別?
#include <stdio.h>
class A{
int *ptr;
public:
void set(int val) const;
};
void A::set(int val) const{
*ptr = val;
printf("%d", *ptr);
}
int main(){
A a;
a.set(40);
return 0;
}
ptr 是一個未初始化的指針。 當您尊重一個未初始化的指針時,它是未定義的行為,任何事情都可能發生。
您應該在構造函數中初始化 ptr
class A{
int *ptr;
public:
A();
void set(int val) const;
};
A:A()
{
ptr = new int();
}
A:~A()
{
delete ptr;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.