[急++]C#中的空指针问题

ELL_COOL_A 2013-12-31 07:54:56
今天刚开始弄C#,遇到了一个很严重的问题。。。就是我再程序中声明一个类,有若干数据成员,并进行批量声明,之后的初始化无法进行,抛出NullReferenceEception,调试信息显示这个类的所有成员属性都是null,为何如此,如何解决呢。。。

附上难看的代码。。。
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication4
{
class huffman
{
const int MAX_SIZE = 255; //缓冲区大小
const int MAXLEN_PATH = 256; //最长路径
const int TABLE_SIZE = 256; //最大权值表大小,不加结束字符
const int TREE_SIZE = (2 * (TABLE_SIZE + 1) - 1); //哈夫曼树结点个数(加上结束字符) 513
const int MAX_BIT = 255; //结点的最大编码位数
const int MAX_INT = (1 << 32 - 1); //最大的整数值
const int END_NUM = 256; //结束符对应的num,权值为1
public char[] Path=new char[MAXLEN_PATH]; //叶子节点的路径,即为叶子节点的编码值,以'\0'作为结束


public huffman(string Source_Path,string Encode_Path)
{
MessageBox.Show(Source_Path +"to\n"+ Encode_Path);
init();
InitHuffmanTree();//初始化哈夫曼树
CalWeights(Source_Path);//计算源文件个字节的权值
SortWeight();
CreateHuffman();//创建哈夫曼树
EnCode(Source_Path, Encode_Path);
}

public huffman(string Source_Path, string Decode_Path,int x)
{
MessageBox.Show(Source_Path + "to\n" + Decode_Path);
init();
InitHuffmanTree();//初始化哈夫曼树
CalWeights(Source_Path);//计算源文件个字节的权值
SortWeight();
CreateHuffman();//创建哈夫曼树
if (x == 1)
{
DeCode(Source_Path, Decode_Path);
}

}




//转换函数将字符转换为十进制整数
public int CHARTONUM(char c)
{
return ((int)c - 48);
}

//类Node定义哈夫曼树节点
public class Node
{
public int weights; //结点权值
public int left; //左孩子结点
public int right; //右孩子结点
public int parent; //父结点
public int num; //当前对应的数
public bool live; //当前树是否存在

//结点权值属性
public int Weight
{
get
{
return weights;
}
set
{
weights = value;
}
}

//左孩子结点属性
public int Left
{
get
{
return left;
}
set
{
left = value;
}
}

//右孩子结点属性
public int RChild
{
get
{
return right;
}
set
{
right = value;
}
}

//父结点属性
public int Parent
{
get
{
return parent;
}
set
{
parent = value;
}
}

//构造器

public Node()
{
weights = 0;
left = -1;
right = -1;
parent = -1;
num = 0;
live = true;
}

public Node(int w, int lc, int rc, int p)
{
weights = w;
left = lc;
right = rc;
parent = p;
}

}//定义节点完成

public Node[] HuffmanTree = new Node[TREE_SIZE];
public void init()//初始化函数
{
try
{
for (int i = 0; i < TABLE_SIZE; i++)
{
HuffmanTree[i].left = -1;//到这里就抛异常了。。。
HuffmanTree[i].right = -1;
HuffmanTree[i].parent = -1;
HuffmanTree[i].num = i;
HuffmanTree[i].live = true;
}
}
catch (NullReferenceException) { };

}
...全文
341 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Regan-lin 2014-01-01
  • 打赏
  • 举报
回复
你妹的,去哪都看到这广告机器,才一阵子没来这机器广告就这么猖狂了?
小猪八Q 2014-01-01
  • 打赏
  • 举报
回复
你这里只是分配了一个指定的Node数组长度的内存堆,所以需要在使用的时候实例化
智商余额不足 2013-12-31
  • 打赏
  • 举报
回复
引用 3 楼 wangchunqi1993 的回复:
[quote=引用 1 楼 hwenycocodq520 的回复:] for (int i = 0; i < TABLE_SIZE; i++) { HuffmanTree[i]=new Node();    HuffmanTree[i].left = -1; ..... ..
是不是因为这里的Node()构造函数不会自动调用。。。所以必须每次都要手动调用?[/quote] 这些东西在msdn都可以找到的,而且详细权威 http://msdn.microsoft.com/zh-cn/library/9b9dty7d(v=vs.90).aspx
ELL_COOL_A 2013-12-31
  • 打赏
  • 举报
回复
引用 1 楼 hwenycocodq520 的回复:
for (int i = 0; i < TABLE_SIZE; i++) { HuffmanTree[i]=new Node();    HuffmanTree[i].left = -1; ..... ..
是不是因为这里的Node()构造函数不会自动调用。。。所以必须每次都要手动调用?
ELL_COOL_A 2013-12-31
  • 打赏
  • 举报
回复
谢谢哈,可是为什么会这样呢?之前不是已经声明了吗。。。。
智商余额不足 2013-12-31
  • 打赏
  • 举报
回复
for (int i = 0; i < TABLE_SIZE; i++) { HuffmanTree[i]=new Node();    HuffmanTree[i].left = -1; ..... ..

110,537

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧