| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1097 人关注过本帖
标题:为什么这个程序在TC里能执行!在VC6.0里就提示说内存不能写入
只看楼主 加入收藏
血刺
Rank: 1
等 级:新手上路
帖 子:12
专家分:5
注 册:2012-2-20
结帖率:60%
收藏
已结贴  问题点数:2 回复次数:8 
为什么这个程序在TC里能执行!在VC6.0里就提示说内存不能写入
程序代码:
#include <stdio.h>
int main(void)
{
    int *p,*a,*b;
    printf("input a:");
    scanf("%d",a);
    printf("input b:");
    scanf("%d",b);
    p=a;
    a=b;
    b=p;
    printf("a=%d,b=%d\n",*a,*b);
    return 0;
}
为什么这个程序在TC里能执行!在VC6.0里就提示说内存不能写入
搜索更多相关主题的帖子: 内存 color 
2012-03-10 01:43
用心微笑
Rank: 1
等 级:新手上路
帖 子:17
专家分:2
注 册:2012-2-17
收藏
得分:0 
回复 楼主 血刺
额。。。。。。为什么在我的VC++里可以运行。。。。。你试着用malloc函数给3个指针变量分配一下内存,看行不行,我也是菜鸟,不对莫喷。。。。。。。。
2012-03-10 02:04
utmostpen
Rank: 1
等 级:新手上路
帖 子:3
专家分:4
注 册:2012-3-7
收藏
得分:0 
你指针指向了什么了?
2012-03-10 07:05
yhmm
Rank: 2
等 级:论坛游民
帖 子:22
专家分:72
注 册:2012-2-27
收藏
得分:0 
VC的数据类型和TC的不一样
可能是这个原因
你试试
 他们的 数据类型 所占的内存空间不一样

                      捷建软件开发互助平台
2012-03-11 10:16
achj198781
Rank: 2
等 级:论坛游民
帖 子:18
专家分:42
注 册:2012-3-9
收藏
得分:0 
你想交换两个数,但是scanf("%d",a);这一句还是不能这么写吧,还是要写成scanf("%d",&a);
我觉得还是重新定义两个指针像这样交换吧
    int p,a,b;
    int *p1,*p2;
    printf("input a:");
    scanf("%d",&a);
    printf("input b:");
    scanf("%d",&b);
    p1=&a;
    p2=&b;

    p=*p1;
    *p1=*p2;
    *p2=p;

    printf("a=%d,b=%d\n",*p1,*p2);
    return 0;
2012-03-11 13:27
apple_taolin
Rank: 2
等 级:论坛游民
帖 子:5
专家分:18
注 册:2012-3-13
收藏
得分:0 
#include<stdio.h>
#include<stdlib.h>

int main(void)
{
    char *p,*a,*b;

    a=(char*)malloc(50);
    if(a==NULL)
    {}
   
    b=(char*)malloc(50);
    if(b==NULL)
    {}

    printf("input a:");
    scanf("%d",a);

    printf("input b:");
    scanf("%d",b);

    p=a;
    a=b;
    b=p;
    printf("a=%d,b=%d\n",*a,*b);

    free(a);
    free(b);

    return 0;
}


指针使用之前要初始化的,你没有初始化,会导致不可预料的行为。
2012-03-13 02:34
恋狱天使
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2012-2-10
收藏
得分:0 
#include <stdio.h>
int main(void)
{
    int p,a,b;
    printf("input a:");
    scanf("%d",a);
    printf("input b:");
    scanf("%d",&b);
    p=a;
    a=b;
    b=p;
    printf("a=%d,b=%d\n",a,b);
    return 0;
}
这样就行了

2012-03-13 11:15
张敏樱木花道
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:139
专家分:137
注 册:2011-3-26
收藏
得分:0 
#include <stdio.h>
int main(void)
{
    int *p=NULL;
    //在这里定义了一个指针变量,
    //也就是我定义了一个可以装地址的变量
    //此时我们还不清楚这个地址中装了什么
    printf("input a:");
    scanf("%d",p);
    //这里需要一个变量的地址,用来存放输入的数据。
    //我们的数据放到哪个地方。你认为是放到了P所指的变量吗,那么哪个变?也即是那个空间在哪?
    //要存储数据必须申请空间。
    //p没有指向任何变量,也就是我们没有向系统申请任何空间。
    //在这个程序中,我们只定义了一个变量,申请了一个空间,那就是用来装指针变量p的那个空间
正解:
    int *p=NULL;
    int a=0;
    p=&a;
    scanf("%d",p);


    //上面的例子也许不是很明显,那么下面这个就很清楚了
错误:
    char *p1=NULL;
    scanf("%s",p1);
    //为什么会错,因为没有空间存储
正确:
    char *p1=NULL;
    char str[256]={0};
    p1=str;
    scanf("%s",p1);


    //那么现在来看一下这个
    int *p2=NULL;
    scanf("%d",&p2);
    printf("%d",p2);
    //这个是不会有任何问题的,正如我上面讲的一样,因为我们定义了变量p2,我们向系统申请了空间,现在有地方放数据了
   
}
总结:一句话,要存储数据,一定要有储存空间。
注意: 没有给指针变量赋初值是不负责任的表现,是一种不受人欢迎的代码风格,如果你知道自己在
        干什么,就不要这么干。
另外,你说的另一个问题,为什么TC中可以,vc中不可。那是编译器的问题。不用深究,没有任何意义。推荐用vc

以上是个人感悟,希望对你有帮助。
2012-03-13 12:01
流编程风
Rank: 1
等 级:新手上路
帖 子:14
专家分:5
注 册:2011-5-5
收藏
得分:0 
路过
2012-03-13 17:27
快速回复:为什么这个程序在TC里能执行!在VC6.0里就提示说内存不能写入
数据加载中...
 
   



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

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