社区
C语言
帖子详情
一个变量的地址突然被改变
bobo2003
2003-10-21 03:09:50
有一个函数,功能是变换日历,类似与公历变农历的那种
进去一个char的指针,出来一个char的指针
现在我传给它一个8位的char的指针,不过8位后面不是\0,
函数以运行,会把我的主函数的某个变量的地址给变了,比如
本来这个变量的地址是652ec01,现在是652ecc1,很奇怪。
现在我把那个8位char的指针付给9位的char的指针,使其最后
一位变为\0,正常。不过那个函数是人家用了又用的,应该不
会有什么问题,我想知道问什么,那个变量的地址为什么会变。
...全文
168
9
打赏
收藏
一个变量的地址突然被改变
有一个函数,功能是变换日历,类似与公历变农历的那种 进去一个char的指针,出来一个char的指针 现在我传给它一个8位的char的指针,不过8位后面不是\0, 函数以运行,会把我的主函数的某个变量的地址给变了,比如 本来这个变量的地址是652ec01,现在是652ecc1,很奇怪。 现在我把那个8位char的指针付给9位的char的指针,使其最后 一位变为\0,正常。不过那个函数是人家用了又用的,应该不 会有什么问题,我想知道问什么,那个变量的地址为什么会变。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
bobo2003
2003-10-22
打赏
举报
回复
->或者 把我的 回答 改成 最好 那么做 !!
这句话什么意思啊?
这段source只是那个函数,具体调的那个地方没有贴出来
我只是想让大家看看这段有没有问题。
njuhuangmy
2003-10-21
打赏
举报
回复
或者 把我的 回答 改成 最好 那么做 !!
你上面的程序 没看到 那里 有
进去一个char的指针,出来一个char的指针
现在我传给它一个8位的char的指针,不过8位后面不是\0,
函数以运行,会把我的主函数的某个变量的地址给变了,比如
本来这个变量的地址是652ec01,现在是652ecc1,
相符的内容阿
njuhuangmy
2003-10-21
打赏
举报
回复
我现在是读一个文件,里面
取得一个长度len,然后根据len,malloc一段内存,就是说
每次malloc(len+1)的内存,是不是啊?
这段话的回答 ,是 YES
david08
2003-10-21
打赏
举报
回复
In a function, if you define
int myfunc()
{
int a;
int b;
char c[4];
...
}
the stack will be like this (from higher address to lower)
.......: (parameters of this function)
0x80008: a
0x80004: b
0x80003: c[3]
0x80002: c[2]
0x80001: c[1]
0x80000: c[0]
Hence if you do not restrain your strings by using ending '\0', you will sometimes currupt your stack!
bobo2003
2003-10-21
打赏
举报
回复
我把函数贴一下,各位帮忙啊,位就是字节,不好意思。
#include "PIASE_C.h"
#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <memory.h>
#include <stdlib.h>
#define ERROR -1
DllExport int RZB2009(
char *in_buf,
char *out_buf)
{
int rtn = 0 ;
int se_nen ;
int len;
char nen[10];
len = strlen(in_buf);
if (len < 4)
{
return ERROR;
}
memset(nen, 0, sizeof(nen));
memcpy(nen, in_buf, 4);
se_nen = atoi(nen) ;
if (se_nen >= 1868 && se_nen <= 1911)
{
sprintf ((char *)out_buf,"1%02d",se_nen - 1867);
}
else
if (se_nen >= 1912 && se_nen <= 1925)
{
sprintf ((char *)out_buf,"2%02d",se_nen - 1911);
}
else
if (se_nen >= 1926 && se_nen <= 1988)
{
sprintf ((char *)out_buf,"3%02d",se_nen - 1925);
}
else
if (se_nen >= 1989 && se_nen <= 2087)
{
sprintf ((char *)out_buf,"4%02d",se_nen - 1988);
}
else
{
rtn = ERROR ;
}
if (rtn != ERROR && len > 4)
{
strcat(out_buf, in_buf + 4);
}
return rtn ;
}
njuhuangmy
2003-10-21
打赏
举报
回复
函数呢 ?
你这个 “位” 用的不好
不如 直接 说 几个字节 几个字节 呢!!!
program2100
2003-10-21
打赏
举报
回复
不清楚,up
bobo2003
2003-10-21
打赏
举报
回复
意思就是说不管什么时候我都要申请一个比我要放的东东
多一位的变量来装?有点奇怪,我现在是读一个文件,里面
取得一个长度len,然后根据len,malloc一段内存,就是说
每次malloc(len+1)的内存,是不是啊?
dddd8888
2003-10-21
打赏
举报
回复
\0是标志,表明结束,若没有则错误不可预测
全局
变量
被未知原因
改变
的解决方法
在开发的过程中总会碰到一些奇怪的问题,仿真的时候一看,发现是某个全局
变量
被莫名其妙
改变
了,导致整个函数判断都出了问题。 全局
变量
可能会被
改变
的原因有以下几点: 1.自己改的(废话~):好好查看这个
变量
被谁调用了 2.全局
变量
字节未对齐: 有一次调试的时候发现
一个
变量
定义成局部
变量
就能正常运行,而定义成全局
变量
就不能运行了。局部
变量
能运行说明我程序的逻辑是没问题的,找原因的时候一看是我全局
变量
经常会莫名其妙被
改变
。找了一圈发现这个
变量
根本没被其他函数使用。 后面通过仿真,得到该
变量
的
地址
(假设为0x1002
C语言全局
变量
被莫名修改,在中断程序里修改全局
变量
的童鞋注意啦-C中的volatile作用...
一个
定义为volatile的
变量
是说这
变量
可能会被意想不到地
改变
,这样,编译器就不会去假设这个
变量
的值了。精确地说就是,优化器在用到这个
变量
时必须每次都小心地重新读取这个
变量
的值,而不是使用保存在寄存器里的备份。下面是volatile
变量
的几个例子:1). 并行设备的硬件寄存器(如:状态寄存器)2).
一个
中断服务子程序中会访问到的非自动
变量
(Non-automatic variables)3)....
程序中
变量
自动
改变
的问题
原文及更多内容:http://yysource.sourceforge.net/?p=99 程序中的
变量
,有时会被莫名奇妙地
改变
。之前明明是111,在某个函数过后可能就变成31348了。 很可能是因为程序中的其他
变量
(比如字符串)写入超出范围了,但是由于超出的部分刚好是本程序的其他
变量
所在的内存空间, 所以系统不会报错。但是你其他的
变量
就这样不幸地“被
改变
”了。 比如,在读取文件内
内存问题--全局
变量
被修改
一、遇到的问题1)情景说明: 我在
一个
类中定义了
一个
全局
变量
a,然后在类初始化的时候给该
变量
赋
一个
初始值a=10。该
变量
有被其他类外部引用,但是外部引用只是使用该值,并没有修改该值。然后在
一个
Timer中每秒打印这个
变量
1次。 2)看到的现象: 该
变量
a期初一直输出10,在突然的某一时刻,该值变成了 0二、我所想到的问题的原因我看到这种现象后,脑子不加思索的就想到以下两种原因: 1)肯定有人
Keil 全局
变量
被修改
一、现象 使用 MDK 开发stm32程序的时候出现全局
变量
被稀里糊涂的修改了。 二、原因分析 经过多方分析,最终发现此问题。该全局
变量
定义的位置在某个数组后面,而该数组在定义的时候并未定义数组大小,导致全局
变量
的
地址
和数组中的某个元素的
地址
冲突(一模一样)。当数组中此元素的值修改时,该全局
变量
的值就别同时修改了。如下所示: int array[] = {0,1,2...}; /* 未给出数组大小 */ int global= 0; 三、解决办法(选择
一个
即可) 1、定义数组的时候给出数组的长
C语言
69,373
社区成员
243,080
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章