Apparentemente nel tuo codice non vi sono errori, anche se la forma più sensata è la seguente:
codice:
        for (int j = 0; j < cols; ++j)
        {
            result[i][j] = (char *)malloc(100 * sizeof(char));
            if (NULL != result[i][j])
            {
                strcpy(result[i][j], "ciao");
            }
        }
        puts("");

PS: purtroppo la OOP implementata in java e PHP è altrettanto pessima, certamente peggiore rispetto a quella (già scadente) di C++. Se vuoi davvero imparare un OOPL puro usato professionalmente e universalmente valido, devi rivolgere la tua attenzione ad Eiffel, Ada, e qualche dialetto Smalltalk (come Squeak).