| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1011 人关注过本帖
标题:一个VC下运行错误的程序,在win-tc上可以运行成功.程序已调试成功,求详细原 ...
只看楼主 加入收藏
三月的雪
Rank: 2
等 级:论坛游民
帖 子:18
专家分:35
注 册:2011-4-14
结帖率:0
收藏
已结贴  问题点数:10 回复次数:4 
一个VC下运行错误的程序,在win-tc上可以运行成功.程序已调试成功,求详细原因
程序代码:
#define  LIST_INIT_SIZE 100
#define  LISTINCREMENT 10
#include  <malloc.h>
#include <stdio.h>
/*顺序表示的线性表*/
typedef struct{
    char *elem;
    int length;
    int listsize;
}Sqlist; 

/*线性表的初始化*/
void initList_sq(Sqlist *list){
    list->elem = (char *)malloc(LIST_INIT_SIZE*sizeof(char));
    list->length = 0;
    list->listsize = LIST_INIT_SIZE;
} 

/*遍历线性表的节点*/
void listTraverse_sq(Sqlist *list){
    int i;
    if(list->length == 0) return;
    for(i=0; i<list->length;i++){
        printf("%c ",*(list->elem + i*sizeof(char)));
    }
} 

/*向线性表中第n个元素之前插入一个节点*/ 
void listInsert_sq(Sqlist *list, int n, char c){
    int i;
    char *newbase;
    if(n<1||n>list->length+1) return;

    if(list->length>=list->listsize){
        newbase = (char *)realloc(list->elem, (list->listsize+LISTINCREMENT)*sizeof(char));
        if(!newbase)    exit(1);
        list->elem = newbase;
        list->length +=  LISTINCREMENT;
    }

    if(list->length != 0)
    for(i=list->length-1; i>=n-1; i--)
            *(list->elem + (i+1)*sizeof(char)) = *(list->elem + (i)*sizeof(char));
    *(list->elem + (n-1)*sizeof(char)) = c;
    list->length += 1;
}


void main(){
    Sqlist *s;      /*VC中此处要改为: Sqlist *s,l; s = &l; */
    initList_sq(s);

    listInsert_sq(s,1,'a');
    listInsert_sq(s,1,'b');
    listInsert_sq(s,1,'c');
    listInsert_sq(s,2,'d');
    listInsert_sq(s,5,'l');

    listTraverse_sq(s);


    free(s);    /*vc中此处应改为:free(s->elem)*/
    getch();

}
见main函数中两处注释,知道是按照书本上是VC上的那个写的规范,但是tc上那个为啥不报错,也能得出正确的运行结果?
求详细分析!

[ 本帖最后由 三月的雪 于 2011-4-14 07:31 编辑 ]
搜索更多相关主题的帖子: 成功 
2011-04-14 07:27
boxinchao
Rank: 4
等 级:业余侠客
帖 子:51
专家分:231
注 册:2011-4-13
收藏
得分:5 
你是在问两个编译器处理方的不同吗?另外一个建议,初始化malloc申请内存后使用memset清零。手机码字理解有误的话请谅解
2011-04-14 07:44
三月的雪
Rank: 2
等 级:论坛游民
帖 子:18
专家分:35
注 册:2011-4-14
收藏
得分:0 
回复 2楼 boxinchao
谢谢2楼:我是问造成这种一对一错的原因。是不是编译器不同的原因我也不知道。

朝花夕拾
2011-04-14 08:58
autumn1202
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:64
专家分:553
注 册:2011-2-21
收藏
得分:5 
目前的代码,指针并没有初始化就开始非法使用了,所以应该是所有的平台运行都会出错才对,tc上能正确运行只能猜测是tc对指针进行了合法初始化?
神奇的问题
等大牛的回答
不管lz能不能搞清楚tc的原因,以后还是不要这么用了
2011-04-14 10:04
三月的雪
Rank: 2
等 级:论坛游民
帖 子:18
专家分:35
注 册:2011-4-14
收藏
得分:0 
回复 4楼 autumn1202
恩。以后不会这么使用的。只是想知道为什么在tc下能正确得出结果,多学点东西。

朝花夕拾
2011-04-14 15:42
快速回复:一个VC下运行错误的程序,在win-tc上可以运行成功.程序已调试成功,求 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.012788 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved