繁体   English   中英

C数组指针加倍

[英]C array of pointers to double

我在c ++代码中遇到内存问题,肯定我错了,但我没有遇到问题。 我已声明一个三个指向double的数组并分配内存。

double *myDoubles[3];

for(int i=0;i<3;i++) {
   myDoubles[i]= (double *) malloc(1000*sizeof(double));
}

myDoubles[2][999]=10.55;

怎么了?

编辑

作为@EdHeal评论和@PhilippKiener我根本不应该使用malloc。 但是25年前很难忘记malloc。 毕竟我的问题是另一个地方的另一个错误,实际上我写的超出限制:)。 我的错!

您每次分配1000个字节而不是1000个双打。 你应该做的是:

malloc(1000 * sizeof(double));

您的完整代码应如下所示:

double* myDoubles[3];
for(int i = 0; i < 3; i++) {
    myDoubles[i] = (double*) malloc(1000 * sizeof(double));
}
myDoubles[2][999] = 10.55;

首先要做的事情是:不要将指针malloc返回。 void* to(在你的情况下) double*是隐式的(和期望的),明确地将它强制转换通常被认为是不好的做法。

现在问你的问题; malloc分配给定的字节数并返回指向这些字节的指针。 你分配1000个字节,但你想要的是为1000 double s分配足够的字节。 您的错误的原因是double大于单个字节 - 它是8个字节。 你可以得到sizeof(type)类型的大小; 要为你的1000 double s分配足够的内存,你必须将循环内的行更改为:

myDoubles[i] = malloc(1000 * sizeof(double));

要了解系统中类型的大小,您可以放置

printf("Size of double: %d", sizeof(double));

在你的代码中。

编辑:

现在,既然您正在使用C ++,那么您根本不应该使用malloc C ++让生活更轻松,让你new

分配线应该是

myDoubles[i] = new double[1000];

新的好处是它不需要提供的尺寸......你给它一个类型和数量; 它计算你需要的字节数。 但要注意,你应该使用而不是free

delete[] myDoubles[i];

当您使用C ++时,请使用std::vector - 请参阅此处

所以代码变成了

std::vector<std::vector<double>> myDoubles(3);
myDoubles[2].resize(1000);
myDoubles[2][999] = 10.55;

也许您需要调整其他条目的大小 - 我将这个练习留给您。

此外,您不必担心内存泄漏。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM