我想读取一个文件并分配一个包含读取值的数组,稍后我将使用它。
这是我得到的:
int main(){
float *values;
somefunction (&values);
values[3]=3; //Works OK but I want to modify it from the other function
}
somefunction(float ** values){
//I read the file here and count the lines
//for the sake of simplicity lets say I got lines=10;
*values = new float[lines]; //Works OK
*values[0]=0; //Works OK because it points to the first or only element
*values[1]=1; //Segmentation Fault
}
为什么从main函数修改新分配的浮点数组是可以的,而不是从分配它的同一函数中修改,我做错了什么?
我非常确定我修改数组的语法是错误的,但我不知道为什么......,提前谢谢。
答案 0 :(得分:5)
更容易阅读...
somefunction(float*& values)
{
values = new float[lines];
values[0] = 0;
values[1] = 1;
}
main()
{
float* values;
somefunction(values);
}
答案 1 :(得分:4)
[]
运算符的优先级高于一元*
运算符。因此,*values[1]
与*(values[1])
相同。你想要的是(*values)[1]
,正如@sigfpe在评论中指出的那样。
答案 2 :(得分:0)
更简单:
float* somefunction()
{
float* values = new float[lines];
values[0] = 0;
values[1] = 1;
return values;
}
main()
{
float* values = somefunction();
}