我已经在objective-c中编程了一段时间,但遗憾的是我从未深入研究过C和内存指针,尽管我对它们有一些基本的了解。我正在使用一组CLLocationCoordinate2D结构,我正在试图找出如何附加到数组。首先,我得到了
NSString *aString; //a bunch of coordinates
CLLocationCoordinate2d *coordinates;
int length;
doSomethingCool(aString, &coordinates, &length);
在我做了一些很酷的事情之后,我想把它保存在一个类变量中。如果我只是做一些像
这样的事情points = newPoints
points 包含适当的内容。但是,如果我尝试做这样的事情:
points = malloc(sizeof(CLLocationCoordinate2D) * length);
points[0] = *newPoints;
积分最终会有与 newPoints 不同的内容。
最终我的目标是能够根据长度附加积分,但如果我无法获得,我将无法做到这一点上面的代码工作。我做错了什么?
答案 0 :(得分:7)
您的代码只是将newPoints
的第一个值复制到points
的第一个值(*newPoints
相当于newPoints[0]
)。
一种情况是创建一个新数组,复制所有值,切换数组,以及释放旧数组。例如:
int* newvals = malloc(sizeof(int) * newcount);
memcpy(newvals, vals, sizeof(int) * oldcount);
free(vals);
vals = newvals;
你也可以使用realloc
- 它的行为类似于上面的行为(虽然它可能会失败!),但有时可能会更有效率。
请注意,您无法以安全便携的方式更改基础指针的大小。您需要使用新指针更新实例(“class”)变量。
答案 1 :(得分:0)
这个想法是将所有数组复制到一个临时数组中,调整原始大小,然后将它们复制回来。然而,管理这个可能会变得多毛。你最好使用std :: vector并添加它。
编辑:我刚刚意识到你正在使用C,而不是C ++。无视这一半的后半部分。