为什么这不起作用?我已多次查看我的代码,但却找不到错误。
谢谢!
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);
}
答案 0 :(得分:3)
你忘了这个如此重要的路线;
return array;
createMatrix
中的。查看编译器警告,或者如果您还没有打开它们,请将它们打开。
答案 1 :(得分:0)
不确定此代码段是否与您的代码直接相关,但您从未从createMatrix()返回该地址。
答案 2 :(得分: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)
将导致崩溃(未定义的行为)。因为您只能访问索引1
而不是100
。
错误在createMatrix
函数中,您错误地使用了x
和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
}