当动态数组与memset发生遭遇
时间:2010-08-25 来源:abcdabcd987
昨天在学校做题的时候,碰巧用到组合+01背包,但是我又懒得去开一个固定的空间,所以直接根据传进来的max开了一个动态数组。结果很悲惨的只对了20分T_T!两个老师看了半天也看不出我算法哪里有错(当然,老师一直怂恿我用Pascal写一遍 :lol )。猛然间,我把数组改成固定的,竟然全过了....- -||。这就不由得让我怀疑是不是memset的原因了。
为此,今天特地做了一下实验,编译器是Visual C++ 2010 Express的。
1 #include <iostream>结果真的被我猜中了,memset在处理动态数组的时候,清零的长度必须乘上数组的大小。
2 #include <cstring>
3 using namespace std;
4 const int ARR = 5;
5 void print(int* a)
6 {
7 for (int i = 0; i < ARR; ++i)
8 {
9 cout << a[i] << " ";
10 }
11 cout << endl;
12 }
13 int main()
14 {
15 cout << "ARR = 5, Array a:" <<endl;
16 int *a = new int[ARR];
17 print(a);
18
19 cout << endl << "memset(a, 0, sizeof(a)):" << endl
20 << "sizeof(a):" << sizeof(a) << endl;
21 memset(a, 0, sizeof(a));
22 print(a);
23
24 cout << endl << "memset(a, 0, sizeof(a)*ARR):" << endl
25 << "sizeof(a)*ARR:" << sizeof(a)*ARR << endl;
26 memset(a, 0, sizeof(a)*ARR);
27 print(a);
28
29 system("pause");
30 }
╮(╯▽╰)╭下次要注意了,害我让费了一个下午
相关阅读 更多 +