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

Dynamically allocate and modify memory from function in C++

本文关键字:函数 内存 修改 动态分配 c++      更新时间:2023-10-16

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

这是我得到的:

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
}

为什么可以从主函数中修改新分配的浮点数组,而不是从分配的相同函数中修改,我做错了什么?

我很确定我的语法修改数组是错误的,但我不知道为什么…

更容易阅读…

somefunction(float*& values)
{
    values = new float[lines];
    values[0] = 0;
    values[1] = 1;
}
main()
{
    float* values;
    somefunction(values);
}

[]运算符的优先级高于一元*运算符。因此,*values[1]*(values[1])相同。你需要的是(*values)[1],正如@sigfpe在评论中指出的。

更简单:

float* somefunction()
{
    float* values = new float[lines];
    values[0] = 0;
    values[1] = 1;
    return values;
}
main()
{
    float* values = somefunction();
}