读书人

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

发布时间: 2012-02-25 10:01:48 作者: rapoo

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

读书人网 >UNIXLINUX

热点推荐