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了一段数据,当然也可能是空闲的内存。这是经典的指 : 针错误,指针一定要初始化。
|