在ssm中修改后台正常数据库也改变了为啥报空指针
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在ssm中修改后台正常数据库也改变了为啥报空指针相关的知识,希望对你有一定的参考价值。
参考技术A 证明空指针是发生在更新数据库之后我为存储在指针地址中的值分配了一个变量,那么为啥当初始值改变时它不改变呢?
【中文标题】我为存储在指针地址中的值分配了一个变量,那么为啥当初始值改变时它不改变呢?【英文标题】:I assigned a variable to the value of what is stored at a pointer's address, so why doesn't it change when the initial value does?我为存储在指针地址中的值分配了一个变量,那么为什么当初始值改变时它不改变呢? 【发布时间】:2021-03-04 17:23:41 【问题描述】:基本上,我只想知道为什么“A”发生变化时“C”不变。我猜这是因为层次结构,但我想确认并解释为什么......
#include <iostream>
using namespace std;
class IntCell
public:
explicit IntCell( int initialValue = 0 )
storedValue = new int initialValue ;
int read() const
return *storedValue;
void write( int x )
*storedValue = x;
private:
int *storedValue;
;
int main()
IntCell a 2 ;
IntCell* b = &a;
IntCell c;
int x = 10000;
int* y = &x;
cout << *y << endl;
c = *b;
a.write(4);
cout << a.read() << endl << c.read();
return 0;
【问题讨论】:
你得到了什么输出,预期的输出是什么?我收到10000 4 4
,这是意料之中的,但我不确定我是否理解您的问题。
@DavidSchwartz storedValue
对于两个实例都是相同的。因此a.write(4);
会影响c.read()
的结果。我认为这就是 OP 的意思。
【参考方案1】:
我测试你的代码,当你改变“a”时,“c”也会改变。 你还需要实现一个复制构造函数和赋值运算符。
IntCell c; // you create a new instance with new memory address.
c = *b; // now this instance point to same memory as "a".
a.write(4); // so when you change "a", "c" change too.
【讨论】:
所以我对整个编程真的很陌生。你做了什么来得到这个故障/你使用什么 IDE?【参考方案2】:在你的情况下,析构函数丢失了。
~IntCell()
cout<<"deleting...\n";
delete storedValue;
您正在使用隐式定义的复制分配。这就是c = *b;
起作用的原因。复制分配后,IntCell c
和IntCell a
都有指向同一位置的成员。如果a.write(4)
,c.read()
将得到相同的值4
。
【讨论】:
以上是关于在ssm中修改后台正常数据库也改变了为啥报空指针的主要内容,如果未能解决你的问题,请参考以下文章
java 泛型函数需要返回Integer 我返回null 为啥报空指针异常
java el表达式报空指针异常(nullpointexception)