Fix crash on Windows when calculating a covariance matrix of dimension 1.
authorJohn Darrington <john@darrington.wattle.id.au>
Fri, 21 May 2010 11:11:04 +0000 (13:11 +0200)
committerJohn Darrington <john@darrington.wattle.id.au>
Fri, 21 May 2010 11:11:04 +0000 (13:11 +0200)
Calculating a covariance matrix on a single variable crashed under Windows.
This change fixes that.  It also prevents GUI users from attempting to
perform a correlation with only one variable, since if they are trying to
do that, then the have probably made a mistake.

src/math/covariance.c
src/ui/gui/correlation-dialog.c

index dc3166923d7ddff670d903274caef1dfe548beb4..d03f6ad07a3039955047a687d7c9115cb99178c1 100644 (file)
@@ -135,7 +135,7 @@ covariance_1pass_create (size_t n_vars, const struct variable **vars,
                         const struct variable *weight, enum mv_class exclude)
 {
   size_t i;
-  struct covariance *cov = xmalloc (sizeof *cov);
+  struct covariance *cov = xzalloc (sizeof *cov);
 
   cov->passes = 1;
   cov->state = 0;
@@ -156,7 +156,8 @@ covariance_1pass_create (size_t n_vars, const struct variable **vars,
 
   cov->n_cm = (n_vars * (n_vars - 1)  ) / 2;
 
-  cov->cm = xcalloc (sizeof *cov->cm, cov->n_cm);
+  if (cov->n_cm > 0)
+    cov->cm = xcalloc (sizeof *cov->cm, cov->n_cm);
   cov->categoricals = NULL;
 
   return cov;
index 04e11ba1479f575e82e385aced8c8e49ed0ffc3a..afc23447a7af3636e58b1b69b28f3864951e5b48 100644 (file)
@@ -74,7 +74,7 @@ dialog_state_valid (gpointer data)
   GtkTreeModel *liststore =
     gtk_tree_view_get_model (GTK_TREE_VIEW (corr->variables));
 
-  if  (gtk_tree_model_iter_n_children (liststore, NULL) >= 1)
+  if  (gtk_tree_model_iter_n_children (liststore, NULL) > 1)
     return TRUE;
 
   return FALSE;