0

为什么这行不通?我已经多次查看我的代码,但找不到问题所在。

谢谢!

void generateData(float** inData, int x, int y){
    inData[0][0]= 3000.0; // SEGFAULT
}

float** createMatrix(int x, int y){
    float** array= malloc(sizeof(float*) * y);
    for(int i=0; i<y; i++)
        array[i] = malloc(sizeof(float) * x);
}

int main(int argc, char** argv) {
    float** arr = createMatrix(100,2);

    generateData(arr, 100, 2);

    return(0);
}
4

3 回答 3

3

你忘记了这条非常重要的线;

return array;

createMatrix. 查看您的编译器警告,或者如果您还没有打开它们,请打开它们。

于 2012-08-08T19:42:30.160 回答
0

不确定此代码段是否与您的代码直接相关,但您从未从 createMatrix() 返回地址。

于 2012-08-08T19:44:24.957 回答
0

return array;是您代码中的一个问题。除此之外还有一个大问题。

float** array= malloc(sizeof(float*) * y);- 您首先为数组分配内存以存储指针数组(浮动)。然后你为每一行分配内存malloc(sizeof(float) * x);

现在您已经为 2 行和 100 列分配了内存。然后调用generateData(arr, 100, 2);。如果generateData你这样做inData[100][2]会导致崩溃。因为您只分配了 2 行,每行有 100 个元素。inData[100][2]相当于*( *(inData + 100) + 2)。这*(inData + 100)将导致崩溃(未定义的行为)。因为您假设只能访问索引1not 100

错误在于createMatrix功能,您错误地使用了xand y。像下面这样重写你的函数。

float** createMatrix(int x, int y)
{
    int i;
    float** array= (float **)malloc(sizeof(float*) * x);
    for(int i=0; i<x; i++)
    {
        array[i] = (float *)malloc(sizeof(float) * y);
    }
    return array;
}

并且还如下重写你generateData的。

void generateData(float** inData, int x, int y)
{
    x--;
    y--;    
    inData[i][j]= 3000.0; //Do you assignment to array here
}
于 2012-08-09T02:27:46.517 回答