Temporary array creation error codes (const)

I get the error code that the expression must have a constant value, but this is a temporary array for a MergeSort function. It also tells me that n1 and n2 are not assignable numbers. How should I proceed?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
  int i, j, k;
		int n1 = m - l + 1;
		int n2 = r - m;

		/* create temp arrays */
		int L[n1], R[n2];

		/* Copy data to temp arrays L[] and R[] */
		for (i = 0; i < n1; i++)
			L[i] = arr[l + i];
		for (j = 0; j < n2; j++)
			R[j] = arr[m + 1 + j];

		/* Merge the temp arrays back into arr[l..r]*/
		i = 0; // Initial index of first subarray 
		j = 0; // Initial index of second subarray 
		k = l; // Initial index of merged subarray 
		while (i < n1 && j < n2)
		{
			if (L[i] <= R[j])
			{
				arr[k] = L[i];
				i++;
			}
			else
			{
				arr[k] = R[j];
				j++;
			}
			k++;
		}

		/* Copy the remaining elements of L[], if there
		are any */
		while (i < n1)
		{
			arr[k] = L[i];
			i++;
			k++;
		}

		/* Copy the remaining elements of R[], if there
		are any */
		while (j < n2)
		{
			arr[k] = R[j];
			j++;
			k++;
		}
	} // merge 
1
2
3
4
5
		int n1 = m - l + 1;
		int n2 = r - m;

		/* create temp arrays */
		int L[n1], R[n2];           // Not legal in standard C++ 


If you have a compiler that adheres strictly to the standard then declaring (non-dynamic) arrays with size that isn't a constant is illegal. (But quite a lot of compilers let you get away with it, as do quite a lot of other languages).

You could use
vector<int> L(n1), R(n2);
instead.

Other than that, discovering errors without compileable code is tricky ...
Last edited on
allocate it with a pointer with the total size of the 2 input arrays and return that or copy it back into arr then destroy it.
8-11 should be memcpy maybe, as well as the last 31++ lines?

there is very likely a way to avoid the copy on 8-11 entirely. Ill have to think on that one.
Last edited on
Hello hareleah,
Simple undeclared and undefined variables :

int l, m, r;

now these variables are "known" but they have no values assigned to them.

the expression must have a constant value


Arrays L and R must stil use some memory, but how much memory ?

Also the array named arr in line 10 is undeclared.

HTH
Topic archived. No new replies allowed.