diff --git a/NEWS b/NEWS
index 8a7a566e6a9faad621e59c9d803948d2edd3c45c..bc33d56693f0c47adcfd292822586c8800be596f 100644
--- a/NEWS
+++ b/NEWS
@@ -339,6 +339,8 @@ documents those changes that are of interest to users and administrators.
  -- MYSQL - Fix issue with adding a reservation if the name has single quotes in
     it.
  -- Correctly print ranges when using step values in job arrays.
+ -- Fix for invalid array pointer when creating advanced reservation when job
+    allocations span heterogeneous nodes (differing core or socket counts).
 
 * Changes in Slurm 15.08.12
 ===========================
diff --git a/src/slurmctld/reservation.c b/src/slurmctld/reservation.c
index 0597b278b6bdea12893e31da34031c535bf16735..3d72882a7b7d5dd542bded9400bfd57b6439b02f 100644
--- a/src/slurmctld/reservation.c
+++ b/src/slurmctld/reservation.c
@@ -4043,7 +4043,7 @@ static void _check_job_compatibility(struct job_record *job_ptr,
 {
 	uint32_t total_nodes;
 	bitstr_t *full_node_bitmap;
-	int i_core, i_node;
+	int i_core, i_node, res_inx;
 	int start = 0;
 	int rep_count = 0;
 	job_resources_t *job_res = job_ptr->job_resrcs;
@@ -4069,9 +4069,8 @@ static void _check_job_compatibility(struct job_record *job_ptr,
 
 	i_node = 0;
 	while (i_node < total_nodes) {
-		int cores_in_a_node = (job_res->sockets_per_node[i_node] *
-				       job_res->cores_per_socket[i_node]);
-
+		int cores_in_a_node = (job_res->sockets_per_node[res_inx] *
+				       job_res->cores_per_socket[res_inx]);
 		int repeat_node_conf = job_res->sock_core_rep_count[rep_count++];
 		int node_bitmap_inx;
 
@@ -4082,6 +4081,7 @@ static void _check_job_compatibility(struct job_record *job_ptr,
 #endif
 
 		i_node += repeat_node_conf;
+		res_inx++;
 
 		while (repeat_node_conf--) {
 			int allocated;