c - 管理 C 中的内存,二维 float 组

标签 c memory-management

我对 C 非常缺乏经验,不得不将它用于探索热传递的类(class)作业。

我遇到了各种关于 (0xC0000005) 返回码的错误。我知道这是越界访问内存的尝试,我可能无法在某处正确分配内存,但我一直无法弄清楚。

知道需要更改什么吗?

#include <stdio.h>
#include <stdlib.h>
#include <math.h>


int main(){

    /* constant alpha squared, the area of the domain */
    const float alphSqrd     = 0.01;
    const float deltX, deltY = 0.0002;
    const float timeStep     = 0.0000009;
    const int   maxTimeSteps = 1000;

    int h, i, j;

    /* 2D Array of Temperature Values */
    float T [500][500];

    float dTdt;

    /* initialise temperature values */
    printf("Initialising 2D array...\n");

    for (i=0; i<500; i++){
        for (j=0; j<500; j++){
            if (150<=i && i<350 && 150<=j && j<350){
                T[i][j] = 50;
            } else {
                T[i][j] = 20;
            }
        }
    }

    printf("Updating values...\n");

    for (h=0; h<maxTimeSteps; h++){
        for (i=0; i<500; i++){
            for (j=0; j<500; j++){
                dTdt = alphSqrd*(((T[i+1][j]-2*T[i][j]+T[i-1][j])/(deltX*deltX))+((T[i][j+1]-2*T[i][j]+T[i][j-1])/(deltY*deltY)));
                T[i][j] = T[i][j] + dTdt * timeStep;
                printf("%f ",T[i][j]);
            }
            printf("\n");
        }
    }

    return 0;
}

最佳答案

虽然这不是您描述的问题,但一个问题是您没有初始化 deltX。而不是这个

const float deltX, deltY = 0.0002;

你想要

const float deltX = 0.0002 , deltY = 0.0002;

除此之外,您还有一个超出范围的问题。如果你要访问索引 i - 1i + 1,你不能从 0 循环到 499500 元素的数组上。

如果我像这样调整循环,它对我有用:

for (i = 1; i < 499; i++) {
        for (j = 1; j < 499; j++) {

关于c - 管理 C 中的内存,二维 float 组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54766487/

相关文章:

未调用 CUDA 内核函数

c++ - c/c++中perl的hash变量替换

node.js : async. 由于大量元素而导致异步处理速度太慢

c++ - 一个类的内存布局是连续的吗?

c - 如何将字符串保存到结构数组成员?

C模式代码: Why this code for printing Star-Pyramid is not working?

c - 在 C 中的 typedef 上初始化整型变量

JavaScript 内存管理陷阱?

c++ - 在结构中访问 std::list 会引发段错误

带有 ImageViews 的 Android ViewFlipper 因内存使用过多而崩溃