在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 cIntCell a 都有指向同一位置的成员。如果a.write(4)c.read() 将得到相同的值4

【讨论】:

以上是关于在ssm中修改后台正常数据库也改变了为啥报空指针的主要内容,如果未能解决你的问题,请参考以下文章

静态工具类中使用注解注入service为啥还是报空指针异常

java 泛型函数需要返回Integer 我返回null 为啥报空指针异常

java el表达式报空指针异常(nullpointexception)

SpringJUnit4测试--测试无反应/控制台报空指针的解决---junit的jar冲突!

定义了一个常数组,为啥能用指针改变数组元素的值?

多线程-为啥在引用上工作不会改变它,而在指针上工作正常[重复]