标题:日常写代码,写的函数不运行,找不到什么情况,求助
只看楼主
幻境猫
Rank: 2
等 级:论坛游民
帖 子:13
专家分:43
注 册:2016-11-7
结帖率:100%
已结贴  问题点数:15 回复次数:6 
日常写代码,写的函数不运行,找不到什么情况,求助
搞了好几天,快疯了,就是不知道哪里出问题了
编译,连接啥的都过了,就是运行时漏掉了要运行的函数

1.编译器没问题 验证方法:运行了其他有函数的小程序,编译,运行,均通过
2.函数名没问题 验证方法:改函数名,就是不运行
3.函数本体没问题 验证方法:把函数本体弄到main中,一切正常
4.数组和指针操作 验证方法:原先在函数中用的是数组,以为是const的锅,改用指针,然而并没有什么卯用
5.编译器优化 验证方法:打开优化,关闭优化。没用

怀疑
编辑器设置问题 环境是VS2008,我是自学,不怎么会调,要真是这种问题就蒙逼了。。。

函数的作用是插入排序 函数原型: int ch_crpx( int * ch)

放代码:
#include<stdio.h>
#include<stdlib.h>
int ch_crpx(int * ch)
{
    int temp, i, n, m, x;


    x = sizeof( ch) / sizeof( int);


    for( i = 1; i < x; i++) {
        for( n = i-1; ( n >= 0) && ( ch[n] > ch[i]); n--) //由小到大ch[n] > ch[i],由大到小ch[n] < ch[i]
            ;
        for( temp = ch[i], m = i; m >= n+2; m--) {
            ch[m] = ch[m-1]; }
        ch[m] = temp;
    }
    return 0;
}
int main()
{
    int ch[4];
    int i, x;


    ch[0] = 6115;
    ch[1] = 8646;
    ch[2] = 4614;
    ch[3] = 7616;

    x = sizeof( ch) / sizeof( int);

    ch_crpx( ch);

    for( i = 0; i < x; i++)
        printf("%d\n",ch[i]);
    system("pause");
    return 0;
}
搜索更多相关主题的帖子: 编译器 编辑器 
2016-11-07 14:33
alice_usnet
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:18
帖 子:370
专家分:2020
注 册:2016-3-7
得分:15 
 x = sizeof( ch) / sizeof( int);  //这句是错的,ch只是指针,不是数组,所以x的值为1(32位机器)

未佩好剑,转身便已是江湖
2016-11-07 14:42
alice_usnet
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:18
帖 子:370
专家分:2020
注 册:2016-3-7
得分:0 
以下是引用alice_usnet在2016-11-7 14:42:24的发言:

 x = sizeof( ch) / sizeof( int);  //这句是错的,ch只是指针,不是数组,所以x的值为1(32位机器)

补充一下是在ch_crpx函数中

未佩好剑,转身便已是江湖
2016-11-07 14:44
幻境猫
Rank: 2
等 级:论坛游民
帖 子:13
专家分:43
注 册:2016-11-7
得分:0 
那咋整啊,非要从外面传入 数组的个数 才能防止数组越界吗?
2016-11-07 15:07
alice_usnet
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:18
帖 子:370
专家分:2020
注 册:2016-3-7
得分:0 
以下是引用幻境猫在2016-11-7 15:07:07的发言:

那咋整啊,非要从外面传入 数组的个数 才能防止数组越界吗?

据我所知对于非字符串类型的数组是这样的

未佩好剑,转身便已是江湖
2016-11-07 15:12
幻境猫
Rank: 2
等 级:论坛游民
帖 子:13
专家分:43
注 册:2016-11-7
得分:0 
回复 5楼 alice_usnet
谢谢你,这个函数困扰了我好多天了,课翘好多,熬到凌晨,害死我了,可算是解决了
2016-11-07 15:23
幻境猫
Rank: 2
等 级:论坛游民
帖 子:13
专家分:43
注 册:2016-11-7
得分:0 
错误整理
错误描述:希望在函数内利用
传入 数组ch    和    x = sizeof( ch) / sizeof( int);
获得    数组的长度
然而获取失败,导致函数无法运行

错误原因:传入的    数组ch    本质上是    地址
用sizeof只能得到地址的占地空间,无法得到数组长度

错误总结:
除了字符串数组可以在函数内确定长度(因为'\0'),其他的请传入数组长度
函数内利用sizeof获取长度,请小心使用
2016-11-11 00:00



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-470829-1-1.html




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

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