由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 一个古怪的C程序运行错误。
相关主题
请问一个exception题目奇怪的问题:关于一个简单的malloc()小程序 (转载)
A aimple C++ question大侠们救命, C++ operator new 问题
为什么foo1可以而foo2不行?电话面试题一问 (转载)
菜鸟求教,一个c++的困惑请教:如何把程序运行结果转给 bash variable ?
没有经过构造函数???how to debug a hidden error
请教这个程序里用到了什么constructor啊?有几个copy constructor?reverse words, not the Microsoft one!!!
[C++ boost::interprocess] 讨论贴关于c++的constructor的面试题
g++ default optimization errorC++菜问: 怎么这样也可以?
相关话题的讨论汇总
话题: int话题: pi话题: malloc话题: 程序运行话题: 错误
进入Programming版参与讨论
1 (共1页)
h**k
发帖数: 3368
1
下面一个简单的程序运行的时候出现了错误 " bus error (core dumped) ",我没有找
出原因,求助。
int main( int argc, char* argv[] )
{
int *b = (int *)malloc( sizeof(int) * 10);
if( !b )
{
cout << "error for malloc" << endl;
return 1;
}
for( int i =0 ; i< 10; ++i )
*(b+i) = i;
int *pi;
*pi = 10;
free(b);
return 0;
}
错误出现在执行 *pi = 10;,怀疑是malloc的问题,但是不知道是什么地方错了。
t****t
发帖数: 6806
2
did you allocate memory for pi?

【在 h**k 的大作中提到】
: 下面一个简单的程序运行的时候出现了错误 " bus error (core dumped) ",我没有找
: 出原因,求助。
: int main( int argc, char* argv[] )
: {
: int *b = (int *)malloc( sizeof(int) * 10);
: if( !b )
: {
: cout << "error for malloc" << endl;
: return 1;
: }

N***m
发帖数: 4460
3
wrong with *pi=10;

【在 h**k 的大作中提到】
: 下面一个简单的程序运行的时候出现了错误 " bus error (core dumped) ",我没有找
: 出原因,求助。
: int main( int argc, char* argv[] )
: {
: int *b = (int *)malloc( sizeof(int) * 10);
: if( !b )
: {
: cout << "error for malloc" << endl;
: return 1;
: }

h**k
发帖数: 3368
4
嗯,我明白了。
不过奇怪的是如果程序里象下面这段,是可以运行成功地。这是为什么?
int main( int argc, char* argv[] )
{
int *pi;
*pi = 10;
cout << *pi << endl;
return 0;
}
N***m
发帖数: 4460
5
it is undetermined behavior. do not play with it,.
at least it does not work on my computer.

【在 h**k 的大作中提到】
: 嗯,我明白了。
: 不过奇怪的是如果程序里象下面这段,是可以运行成功地。这是为什么?
: int main( int argc, char* argv[] )
: {
: int *pi;
: *pi = 10;
: cout << *pi << endl;
: return 0;
: }

c***k
发帖数: 1589
6
pi没有被初始化,所以是一个随机的地址,这个地址可能正好在你运行的seg里面,但
是你这么做,必然是Overwrite了一段数据,当然也可能是空闲的内存。这是经典的指
针错误,指针一定要初始化。

【在 h**k 的大作中提到】
: 嗯,我明白了。
: 不过奇怪的是如果程序里象下面这段,是可以运行成功地。这是为什么?
: int main( int argc, char* argv[] )
: {
: int *pi;
: *pi = 10;
: cout << *pi << endl;
: return 0;
: }

v****s
发帖数: 1112
7
compiler好像会提示没有初始化吧。。。至少我的vc.net说了
gcc没有类似提示?

【在 c***k 的大作中提到】
: pi没有被初始化,所以是一个随机的地址,这个地址可能正好在你运行的seg里面,但
: 是你这么做,必然是Overwrite了一段数据,当然也可能是空闲的内存。这是经典的指
: 针错误,指针一定要初始化。

1 (共1页)
进入Programming版参与讨论
相关主题
C++菜问: 怎么这样也可以?没有经过构造函数???
a simple question for C++ class请教这个程序里用到了什么constructor啊?有几个copy constructor?
关于C++中一个Class的大小 (转载)[C++ boost::interprocess] 讨论贴
数组定义的时候,分配空间了么?g++ default optimization error
请问一个exception题目奇怪的问题:关于一个简单的malloc()小程序 (转载)
A aimple C++ question大侠们救命, C++ operator new 问题
为什么foo1可以而foo2不行?电话面试题一问 (转载)
菜鸟求教,一个c++的困惑请教:如何把程序运行结果转给 bash variable ?
相关话题的讨论汇总
话题: int话题: pi话题: malloc话题: 程序运行话题: 错误