首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C语言的内存问题

C语言的内存问题
EN

Stack Overflow用户
提问于 2016-09-13 17:32:45
回答 1查看 106关注 0票数 1

你好,祝你今天愉快,经过几天的尝试和错误,我来到这里,所以如果我装傻了,请原谅我。

我有下面的代码。这段代码的思想首先是读取我拥有的所有文件,并将所有数据存储到一个矩阵NsitesxNxxNy中,然后将数据用于其他无关的事情。

数据量不是很大,我的意思是,我有800个数据文件发生的不超过80 to,但无论如何,如果我试图使用一个数字高于134号,我会得到一个分割错误错误。

我认为这很奇怪,因为如果它与许多DataFiles=100一起工作,为什么它不应该在更高的地方工作?

我认为这是因为我的程序没有为进程分配足够的内存,或者是因为我在分配内存时遇到了问题。但是我总是有相同数量的数据,我的数据文件有精确的88*44值,并且只工作到134个文件--它是.我没有使用“大量”数据/内存的经验,但我认为1000*88*44 --也就是10^6的两位数--并不是太多。

我使用GCC编译器和Ubuntu (我认为是14.02),当我试图用代码锁在Windows中编译和执行这个程序时,它只是崩溃(另一个错误)。

哦,我还有一个终端打开,内存使用RAM和134个文件,这不是什么大的计算机处理。

编辑:我还试着制作几个[100][Nx][Ny]数组,并逐一使用它们,但这也会导致分段错误。EDIT2:小错误文本和代码,我是这样做的,因为我需要所有的数据同时.我正在考虑避免这种情况的新方法,但最近几天没有找到任何替代办法。

代码语言:javascript
运行
复制
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>


const int   Nx=88;          //
const int   Ny=44;          //
const int   DataFiles=100;  // How many data files are we going to read 


int main() {
int i, j, ki , kj ,index;
double fun[DataFiles][Nx][Ny], Res[DataFiles][Nx][Ny],mean[Nx][Ny];
FILE * conf;
char file[100];

for (index=0; index<DataFiles; index++){

    sprintf(file,"data//file%i00.txt",5000+index*25);
    conf=fopen(file,"r");

    for(ki=0;ki<Nx;ki++){
        for(kj=0;kj<Ny;kj++){

            fscanf(conf,"%i %i %lf", &i, &j, &fun[index][ki][kj]);
            mean[ki][kj] = mean[ki][kj] + fun[index][ki][kj] ;

    }}
fclose (conf);
}
// do things with my loaded data
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-13 17:40:44

你的堆用完了。一般来说,不要在堆栈上一次分配超过8k。糟了。

变化

代码语言:javascript
运行
复制
double fun[DataFiles][Nx][Ny], Res[DataFiles][Nx][Ny],mean[Nx][Ny];

代码语言:javascript
运行
复制
double (*fun)[Nx][Ny] = malloc(sizeof(fun[0]) * DataFiles), (*Res)[Nx][Ny] = malloc(sizeof(Res[0]) * DataFiles), mean[Nx][Ny];
if (!fun || !Res) {
    /* handle OOM */
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39475879

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档