linux 内存分配错误的是,内存分配错误 - 在Linux中但不是OSX Unix

我正在为统计软件包编写一些代码,并开始通过读取数据到指针数组。我初始化指针并使用malloc分配足够的内存;但是,我有时会在下面的代码末尾处分配内存错误。内存分配错误 - 在Linux中但不是OSX Unix

#include

#include

#include

#include "stats.h"

int main(int argc, char **argv) {

FILE *fp, *outFile, *outBin; // create a file identifier

size_t n, nbins; // # of data points

double *data; // pointer to hold data

double average, variance, *med; // stat returns

int medianComplete, histComplete, i; // return 1 on success

hist_t *Histogram;

// read in the number of bins from exe arguments

nbins = atoi(argv[1]);

nbins = (size_t)nbins;

// open the binary datafile and read in first value

// which is number of data points

// use exe input for filename

fp = fopen(argv[2],"rb");

fread(&n, sizeof(size_t),1,fp);

// allocate enough memory to hold all data

data = (double*)malloc(sizeof(double)*n);

if (!data)

printf("Memory allocation error");

fread(data,sizeof(double),n,fp);

这个程序编译和运行以及我的个人机(MacOSX的),但未能由于分段错误,当我试图在Linux服务器上运行它。我使用Valgrind来查看是否可以找出错误,并收到以下结果。

==8641== Warning: silly arg (-501426814648844128) to malloc()

==8641== Invalid write of size 1

==8641== at 0x4C2B20D: mempcpy (mc_replace_strmem.c:956)

==8641== by 0x4EA2F15: _IO_file_xsgetn (fileops.c:1423)

==8641== by 0x4E971D2: fread (iofread.c:44)

==8641== by 0x40086D: main (runstats.c:28)

==8641== Address 0x0 is not stack'd, malloc'd or (recently) free'd

这是我曾经写过一个使用指针的第一个程序,我茫然为什么它会在一个系统上工作,而不是其他。

2012-02-03

dwv5009

+0

加在文件指针的测试和fopen()函数是成功的。 Valgrind表示当我将内存分配给数据时发生错误。我在数据上执行的检查在服务器上失败,但通过我自己的计算机。 –

2012-02-03 08:29:36

+0

当我看到这个问题时,首先看到的是:“为什么他在C语言中做这个时,有几十种更合适的语言?” –

2012-02-03 08:35:31

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值