我试图计算地图中〜1000点之间每两点之间的距离。在定义距离数组d [1000] [1000]时,我得到错误“code :: blocks已经停止工作”。
代码:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main(){
double d[1000][1000];
//...
return 0;
}
我正在使用64位PC并在Code :: Blocks中进行编码。
答案 0 :(得分:5)
你的堆栈可能正在溢出。这是创建一个8兆字节的数组。使其全球化可能会解决您的问题。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
double d[1000][1000];
int main(){
...
return 0;
}
编辑:当然,你可以使用malloc和free。但是,由于这显然是一个初学者的问题,我避免使用它们。并且,因为数组是在main的顶部创建的,所以这个特定情况可以作为全局使用,因为根据定义它已经是单例。
这个(@ iharob)是我的回答:虽然我不喜欢另一个问题的答案,但问题又被关闭了。也许这应该是重复标记一个
如果你想使用2索引表示法,你需要使用malloc()
,你需要创建一个与你的代码中的指针非常不同的指针数组。指针数组不会重复存储值,并且需要混淆分配释放代码,这反过来又会使管理错误变得非常困难。
根据您的需要,如果您需要飞机上的点,请执行此操作,因为它更干净,分配/解除分配更简单
struct Point
{
double x;
double y;
};
struct Point *data;
data = malloc(1000 * sizeof(*data));
if (data == NULL)
please_do_not_continue();
// Now you can access `data' like
data[0].x = 1;
data[0].y = 2;
如果你真的需要它是一个二维数组,你可以使用指针数组(如果你愿意的话,数组数组)模仿它
double **array;
array = malloc(1000 * sizeof(*array));
if (array == NULL)
return handle_malloc_failure();
for (size_t i = 0 ; i < 1000 ; ++i)
{
array[i] = malloc(1000 * sizeof(**array));
// See how handling errors now is very complicated
if (array[i] == NULL)
free_allocated_elements_and_return?();
}
// ...
请记住,当你不再需要访问它时,你必须free()
这个,那就是在第二种情况下循环thourgh每个指针,最后free()
指针数组。而在第一种情况下只需free(data)
。