m******g 发帖数: 91 | 1 【 以下文字转载自 Programming 讨论区 】
【 原文由 mangmang 所发表 】
这个程序在linux/x86上用gcc编译运行没有问题;
在Solaris(UNIX)机器上编译没问题, 但一运行就bus error.
这好像是跟机器有关系, 但还没整明白. 请大侠解惑. thx.
#include
#include
void fnFoo(void *pRow);
int main()
{
char *pTableRow;
int iRowSize;
/* the row looks like: int- char10 - int - char4
*/
iRowSize = sizeof(int) * 2 + sizeof(char) * 16;
pTableRow = (char *)calloc(1, iRowSize);
fnFoo(pTableRow);
printf("->%d<-\n", *(int*)pTableRow);
printf("->%s<-\n", (char*) | x******g 发帖数: 3952 | 2 As I remember, solaris is more strict on alignment.
So an int has to be int aligned. If you cast a char* to an int*,
you might get bus error.
Try change your pTableRow to an int* and cast to char* whenever needed.
【在 m******g 的大作中提到】 : 【 以下文字转载自 Programming 讨论区 】 : 【 原文由 mangmang 所发表 】 : 这个程序在linux/x86上用gcc编译运行没有问题; : 在Solaris(UNIX)机器上编译没问题, 但一运行就bus error. : 这好像是跟机器有关系, 但还没整明白. 请大侠解惑. thx. : #include : #include : void fnFoo(void *pRow); : int main() : {
| m******g 发帖数: 91 | 3 thx a lot !
【在 x******g 的大作中提到】 : As I remember, solaris is more strict on alignment. : So an int has to be int aligned. If you cast a char* to an int*, : you might get bus error. : Try change your pTableRow to an int* and cast to char* whenever needed.
|
|