| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 611 人关注过本帖
标题:动态申请内存问题——是编译器错误吗?
只看楼主 加入收藏
zhuyi8120
Rank: 2
等 级:论坛游民
帖 子:34
专家分:12
注 册:2014-11-4
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:10 
动态申请内存问题——是编译器错误吗?
#include<stdio.h>
#include <stdlib.h>

#define T 15
#define N 8
     int i,t;
   float *length;
    float *x;
    float *v;
    float *gap;  
    length=(float *)malloc(sizeof(float)*N);
    x=(float *)malloc(sizeof(float)*N*T);
    v=(float *)malloc(sizeof(float)*N*T);
    gap=(float *)malloc(sizeof(float)*N*T);
        if (length==NULL)printf("length申请不成功");
        if (x==NULL)printf("x申请不成功");
        if (v==NULL)printf("v申请不成功");
        printf("\nv=%p,x=%p,*v=%f,*x=%f\n",v,x,*v,*x);
        
    for(i=0;i<N/2;i++){//问题点
        for(t=0;t<T/2;t++){
            *(x+t*N+i)=i+1;
            *(v+t*N+i)=i+2;
            *(gap+t*N+i)=i+3;
            printf("x[%d][%d]=%f,",t,i,*(x+t*N+i));//该段必须存在,不然,程序崩溃
            printf("v[%d][%d]=%f,",t,i,*(v+t*N+i));
            printf("gap[%d][%d]=%f,",t,i,*(gap+t*N+i));
            }
            printf("\n");
        }

    free(x);free(v);free(length);free(gap);
--------
问题点在于,申请了空间,空间可以用,但是free不了。如果用了中间用了中间的那三句 prinft(....);,而赋值那三句,可用可不用。,就可以free,如果不用,则出现错误。
请各位指点程序是错在哪里,我怀疑是编译器问题。
搜索更多相关主题的帖子: include 编译器 动态 
2014-12-09 12:19
zhuyi8120
Rank: 2
等 级:论坛游民
帖 子:34
专家分:12
注 册:2014-11-4
收藏
得分:0 
我用的是C-Free编译器。
2014-12-09 12:19
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:4 
将代码逐步删除掉部分试试看
2014-12-09 14:13
yahwei
Rank: 7Rank: 7Rank: 7
来 自:湖~
等 级:黑侠
威 望:3
帖 子:145
专家分:644
注 册:2011-11-10
收藏
得分:4 
VC6.0用不用printf都正常,没装C-Free,所以没办法帮你调试……

[qq]949654600[/qq]
2014-12-09 16:13
zhuyi8120
Rank: 2
等 级:论坛游民
帖 子:34
专家分:12
注 册:2014-11-4
收藏
得分:0 
我就是逐步删除来试的,看来,确实是编译器的问题。
2014-12-09 18:24
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:4 
C-Free也不更新了 可惜了
2014-12-09 18:36
诸葛欧阳
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:流年
等 级:贵宾
威 望:82
帖 子:2790
专家分:14619
注 册:2014-10-16
收藏
得分:4 
什么时候多了个发表情的功能

一片落叶掉进了回忆的流年。
2014-12-09 18:55
longwu9t
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:732
专家分:2468
注 册:2014-10-9
收藏
得分:4 
程序代码:
#include<stdio.h>
#include <stdlib.h>
#define T 15
#define N 8

int main(void) {
    int i, t;
    float *length, *x, *v, *gap;

    length = (float *)malloc(sizeof(float) * N);
    if(length == NULL) {
        printf("length申请不成功");
    }

    x = (float *)malloc(sizeof(float) * N * T);
    if(x == NULL) {
        printf("x申请不成功");
    }

    v = (float *)malloc(sizeof(float) * N * T);
    if(v == NULL) {
        printf("v申请不成功");
    }

    gap = (float *)malloc(sizeof(float) * N * T);
    if(gap == NULL) {
        printf("gap申请不成功");
    }

    printf("v=%p\nx=%p\n*v=%f\n*x=%f\n", v, x, *v, *x);

    for(i = 0; i < N / 2; i++) {
        for(t = 0; t < T / 2; t++) {
            *(x + t * N + i) = i + 1;
            *(v + t * N + i) = i + 2;
            *(gap + t * N + i) = i + 3;
        }
    }

    free(x);
    free(v);
    free(length);
    free(gap);
    return 0;
}


C-Free 有的下载版本用的是vs2010的C++编译器
我也用vs2010的C++编译器 成功编译上面的代码 运行无错
楼主自行对比就知道原因了
图片附件: 游客没有浏览图片的权限,请 登录注册

Only the Code Tells the Truth             K.I.S.S
2014-12-09 19:15
zhuyi8120
Rank: 2
等 级:论坛游民
帖 子:34
专家分:12
注 册:2014-11-4
收藏
得分:0 
楼上该不是告诉我t*N,一定要写成 t * N,分开一个空格吧?
但这也与加不加printf有什么关系啊。
另外,如我刚才没看对,还请楼上明示!
我确认已经申请到内存了(在另一个完整版程序里能够成功运行一次 ,第二次重新申请内存时,是在free那里崩溃——无提示内容,直接崩溃。在此之前的数据因为已经写入文本文档,可查到运行记录。),但就是是无法释放,以重新申请一个更大的内存空间。明天开始换VC用下
2014-12-10 01:44
BuilderZ
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:82
专家分:123
注 册:2014-9-22
收藏
得分:4 
2014-12-10 03:15
快速回复:动态申请内存问题——是编译器错误吗?
数据加载中...
 
   



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

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