首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

难道这也能建立链表?大家看看对不?该如何解决

2012-02-25 
难道这也能建立链表?大家看看对不?数据结构没有学好!有时用到链表,只能笨点多用点内存做成数组。以前一直不

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

热点排行