比如有两个数组(假设是int类型),我需要找到他们的公共元素,放入第三个数组,但是我之前是不知道有多少个公共元素,为了不浪费内存我准备用 int* array_c = new int;
程序编译运行都没问题,但是提示
*** glibc detected *** ./findsame: free(): invalid next size (fast): 0x08222008 ***
======= Backtrace: =========
/lib/libc.so.6(+0x6c501)[0x267501]
/lib/libc.so.6(+0x6dd70)[0x268d70]
/lib/libc.so.6(cfree+0x6d)[0x26be5d]
/usr/lib/libstdc++.so.6(_ZdlPv+0x21)[0x1ba441]
./findsame[0x80489b6]
/lib/libc.so.6(__libc_start_main+0xe7)[0x211ce7]
./findsame[0x8048691]
======= Memory map: ========
00110000-001ef000 r-xp 00000000 08:07 1534298 /usr/lib/libstdc++.so.6.0.14
001ef000-001f3000 r--p 000de000 08:07 1534298 /usr/lib/libstdc++.so.6.0.14
怎么回事?
这个确实可行,不过似乎不需要k,即使设为int* a = (int*) calloc(1,sizeof(int));
也可以,这是怎么回事啊?
最好不要这样,这样你存放元素时是存放在没有开辟的内存空间中,也许有时会是正确的,不过对系统会有损伤。这好比把一系列字符常量赋值给一个char 类型的指针变量时不加'\0',有时也会使用正确,不过最好还是不要采取这种做法
明白了,主要是不明白为啥程序可以运行,但就是有提示。
就是不想浪费内存。