日期:2014-05-16  浏览次数:20759 次

难道这也能建立链表?大家看看对不?
数据结构没有学好!
有时用到链表,只能笨点多用点内存做成数组。以前一直不用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分