C ++ 2D تحطم مجموعة ديناميكية
-
10-07-2019 - |
سؤال
ومرحبا أواجه بعض المشاكل مع 2D صفيف حيوية.
int main()
{
double **M;
int M_dimension;
int i;
M_dimension = 10;
M = new double *[M_dimension];
for (i=0;i<M_dimension;i++)
{
M[i] = new double[M_dimension];
}
M[0][0] = 1.0;
...
}
والبرنامج يعمل ولكن أود أن تهيئة 2D مجموعة باستخدام هذه الوظيفة:
void initialize2D(double **M,int M_dimension)
{
int i;
M = new double *[M_dimension];
for (i=0;i<M_dimension;i++)
{
M[i] = new double[M_dimension];
}
}
وأخيرا البرنامج يبدو مثل هذا:
int main()
{
double **M;
int M_dimension;
int i;
M_dimension = 10;
initialize2D(M,M_dimension);
M[0][0] = 1.0; //crash
...
}
ومما يؤسف له أنها تعطل في M[0][0] = 1.0;
وشكرا على اي مساعدة أو اقتراحات.
المحلول
ويتم تمرير M
من حيث القيمة، بدلا من الإشارة. initialize2D
يحتاج إلى تغيير قيمة M
المؤشر إلى مؤشر مثل أن يشير إلى الذاكرة المخصصة
وحاول تغيير التوقيع وظيفة لهذا بدلا من ذلك:
void initialize2D(double **&M,int M_dimension)
أو
void initialize2D(double ***M,int M_dimension) {
...
*M = new double *[M_dimension];
...
}
نصائح أخرى
وتحتاج إلى تمرير إشارة إلى double**
بدلا من double**
إلى وظيفة، وإلا فإن التعديل عمله لمؤشر بعد تعيين M في reslut من new
تضيع على الخروج من وظيفة.
وما قد تكون المشكلة هو المكان الذي يعلن معلمة عدد صحيح مثل M_dimension كثافة العمليات باطلا initialize2D (مزدوج ** M، الباحث M_dimension)
وثم تهيئة صفيف حيوية على النحو التالي: M [ط] = جديد مزدوج [M_dimension]؛
وحيث يتعلق الأمر تناقض لأنك أعلن M_dimension متغير كعدد ثم استخدامه كما مزدوج
وتحاول ذلك على النحو التالي: إما تغيير نوع البيانات من مجموعة أو M_dimension، حتى ذلك الحين كلا منهم لديهم نفس نوع البيانات.
ونأمل أن هذا سوف تساعدك على الخروج
لماذا لا يتم استخدام std::vector
أو Boost.MultiArray
وسيكون من السهل جدا ممارسة لتحديد مجموعة 2-الابعاد كما ناقلات عام ناقلات في C ++