从C ++中的函数动态分配和修改内存

时间:2014-05-23 21:23:19

标签: c++

我想读取一个文件并分配一个包含读取值的数组,稍后我将使用它。

这是我得到的:

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函数修改新分配的浮点数组是可以的,而不是从分配它的同一函数中修改,我做错了什么?

我非常确定我修改数组的语法是错误的,但我不知道为什么......,提前谢谢。

3 个答案:

答案 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();
}