难道这也能建立链表?大家看看对不?
数据结构没有学好!
有时用到链表,只能笨点多用点内存做成数组。以前一直不用realloc(),以为它会把已分配的内存free后再重新分配,今天用了一下发现好像不是。这不也能建立链表吗?看我的测试。
先malloc一个,以后再realloc,新的放到新增的内存里。不也建立一个吗??
大家说说。。
- C/C++ code
#include <stdio.h>#include <stdlib.h>#include <assert.h>#include <string.h>#include <crtdbg.h>void main( void ){ int *p, *pi; int i = 2; int j; p = (int *)malloc(sizeof(int) * i); assert(p != NULL); for(j=0; j<i; j++){ p[j] = j; } for(j=0; j<i; j++){ printf("p[%d]=%d\n", j, p[j]); } puts("\n"); pi = (int *)malloc(500); p = (int *)realloc(p, sizeof(int) * 2 * i); assert(p != NULL); for(j=i; j<i*2; j++){ p[j] = j*2; } for(j=0; j<2*i; j++){ printf("p[%d]=%d\n", j, p[j]); } free(p); free(pi); if(_CrtDumpMemoryLeaks()){ printf("leak\n"); }}[解决办法]
realloc可能重新分配空间 也可能不重新分配空间
所以你用
p = (int *)realloc(p, sizeof(int) * 2 * i);
对p重新赋值是对的
[解决办法]
楼上正解
[解决办法]
以后在编程的时候多考虑性能
这很重要如果面试的时候你这么写直接就是0分