[英]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.