6 个解决方案
#1
用CArray<TYPE,TYPE>数组来实现。
#2
没办法做到,因为C/C++都是静态特性非常强的语言,dnot[4]这个一般是在编译期就确定好的,没办法改变(C99里面引入了VLA,但是仍然不能解决你的问题,因为VLA在第一次定下长度以后不能再被改变)。
如果你使用的是DNotelListNode **dnot的话,倒是可以使用realloc来重新分配大小(但是要求你分配dnot指向的空间的时候使用的是C风格的空间分配函数malloc等)。不过这个不算什么苛刻的要求,对于指针来说不需要调用额外的构造函数来进行初始化,所以不要紧……
如果这个方法你不能接受,就只能靠C++标准库里面提供的容器或者MFC里面的容器了(一般来说,这些容器虽然用起来方便,但是有不少额外的开销……)
如果你使用的是DNotelListNode **dnot的话,倒是可以使用realloc来重新分配大小(但是要求你分配dnot指向的空间的时候使用的是C风格的空间分配函数malloc等)。不过这个不算什么苛刻的要求,对于指针来说不需要调用额外的构造函数来进行初始化,所以不要紧……
如果这个方法你不能接受,就只能靠C++标准库里面提供的容器或者MFC里面的容器了(一般来说,这些容器虽然用起来方便,但是有不少额外的开销……)
#3
用指针,malloc ,realloc 就能实现动态分配了
先用malloc 分配内存
再用realloc 改变已经分配的内存大小。
原理:
1.判断原内存之后一直到再有数据的空闲内存
2.如果新分配的内存小于 如上 现有的空闲,则直接改变原内存大小
否则:将在一块新的堆内存中分配总共的内存大小,再用memcpy将原数据复制过去。(由于内存复制速度非常快,所以根本感觉不出来)
先用malloc 分配内存
再用realloc 改变已经分配的内存大小。
原理:
1.判断原内存之后一直到再有数据的空闲内存
2.如果新分配的内存小于 如上 现有的空闲,则直接改变原内存大小
否则:将在一块新的堆内存中分配总共的内存大小,再用memcpy将原数据复制过去。(由于内存复制速度非常快,所以根本感觉不出来)
#4
dnot=(DNotelListNode **)malloc(4 * sizeof(DNotelListNode * ));
怎么是错的呀,我要怎么写呀,急呀
怎么是错的呀,我要怎么写呀,急呀
#5
好像没有问题么……
编译器报告什么错误?
编译器报告什么错误?
#6
你不会还是沿用了以前的定义吧?
DNotelListNode *dnot[4]这个定义也要跟着修改的……
改成这样:
DNotelListNode **dnot;//这里要改
dnot = (DNotelListNode**)malloc(4 * sizeof(DNotelListNode*));
DNotelListNode *dnot[4]这个定义也要跟着修改的……
改成这样:
DNotelListNode **dnot;//这里要改
dnot = (DNotelListNode**)malloc(4 * sizeof(DNotelListNode*));
#1
用CArray<TYPE,TYPE>数组来实现。
#2
没办法做到,因为C/C++都是静态特性非常强的语言,dnot[4]这个一般是在编译期就确定好的,没办法改变(C99里面引入了VLA,但是仍然不能解决你的问题,因为VLA在第一次定下长度以后不能再被改变)。
如果你使用的是DNotelListNode **dnot的话,倒是可以使用realloc来重新分配大小(但是要求你分配dnot指向的空间的时候使用的是C风格的空间分配函数malloc等)。不过这个不算什么苛刻的要求,对于指针来说不需要调用额外的构造函数来进行初始化,所以不要紧……
如果这个方法你不能接受,就只能靠C++标准库里面提供的容器或者MFC里面的容器了(一般来说,这些容器虽然用起来方便,但是有不少额外的开销……)
如果你使用的是DNotelListNode **dnot的话,倒是可以使用realloc来重新分配大小(但是要求你分配dnot指向的空间的时候使用的是C风格的空间分配函数malloc等)。不过这个不算什么苛刻的要求,对于指针来说不需要调用额外的构造函数来进行初始化,所以不要紧……
如果这个方法你不能接受,就只能靠C++标准库里面提供的容器或者MFC里面的容器了(一般来说,这些容器虽然用起来方便,但是有不少额外的开销……)
#3
用指针,malloc ,realloc 就能实现动态分配了
先用malloc 分配内存
再用realloc 改变已经分配的内存大小。
原理:
1.判断原内存之后一直到再有数据的空闲内存
2.如果新分配的内存小于 如上 现有的空闲,则直接改变原内存大小
否则:将在一块新的堆内存中分配总共的内存大小,再用memcpy将原数据复制过去。(由于内存复制速度非常快,所以根本感觉不出来)
先用malloc 分配内存
再用realloc 改变已经分配的内存大小。
原理:
1.判断原内存之后一直到再有数据的空闲内存
2.如果新分配的内存小于 如上 现有的空闲,则直接改变原内存大小
否则:将在一块新的堆内存中分配总共的内存大小,再用memcpy将原数据复制过去。(由于内存复制速度非常快,所以根本感觉不出来)
#4
dnot=(DNotelListNode **)malloc(4 * sizeof(DNotelListNode * ));
怎么是错的呀,我要怎么写呀,急呀
怎么是错的呀,我要怎么写呀,急呀
#5
好像没有问题么……
编译器报告什么错误?
编译器报告什么错误?
#6
你不会还是沿用了以前的定义吧?
DNotelListNode *dnot[4]这个定义也要跟着修改的……
改成这样:
DNotelListNode **dnot;//这里要改
dnot = (DNotelListNode**)malloc(4 * sizeof(DNotelListNode*));
DNotelListNode *dnot[4]这个定义也要跟着修改的……
改成这样:
DNotelListNode **dnot;//这里要改
dnot = (DNotelListNode**)malloc(4 * sizeof(DNotelListNode*));