#include <stdio.h>
#include <stdlib.h>
#define MAX_ROWS 5
#define MAX_COLS 5
int globalvariable = 100;
void CreateMatrix(int ***Matrix)
{
int **ptr;
char *cp;
int i = 0;
*Matrix = (int**)malloc((sizeof(int*) * MAX_ROWS) + ((MAX_ROWS * MAX_COLS)*sizeof(int)));
ptr = *Matrix;
cp = (char*)((char*)*Matrix + (sizeof(int*) * MAX_ROWS));
for(i =0; i < MAX_ROWS; i++)
{
cp = (char*)(cp + ((sizeof(int) * MAX_COLS) * i));
*ptr = (int*)cp;
ptr++;
}
}
void FillMatrix(int **Matrix)
{
int i = 0, j = 0;
for(i = 0; i < MAX_ROWS; i++)
{
for(j = 0; j < MAX_COLS; j++)
{
globalvariable++;
Matrix[i][j] = globalvariable;
}
}
}
void DisplayMatrix(int **Matrix)
{
int i = 0, j = 0;
for(i = 0; i < MAX_ROWS; i++)
{
printf("\n");
for(j = 0; j < MAX_COLS; j++)
{
printf("%d\t", Matrix[i][j]);
}
}
}
void FreeMatrix(int **Matrix)
{
free(Matrix);
}
int main()
{
int **Matrix1, **Matrix2;
CreateMatrix(&Matrix1);
FillMatrix(Matrix1);
DisplayMatrix(Matrix1);
FreeMatrix(Matrix1);
getchar();
return 0;
}
Если код выполнен, в диалоговом окне появляются следующие сообщения об ошибках.Создание 2D-массива в одном вызове malloc()
Windows has triggered a breakpoint in sam.exe.
This may be due to a corruption of the heap, which indicates a bug in sam.exe or any of the DLLs it has loaded.
This may also be due to the user pressing F12 while sam.exe has focus.
The output window may have more diagnostic information.
Я пытался отладки в Visual Studio, когда printf("\n");
заявление DisplayMatrix()
выполняется, то же самое сообщение об ошибке воспроизводится.
Если я нажму продолжать, он будет печатать от 101 до 125, как ожидалось. В режиме выпуска нет проблем!.
Пожалуйста, поделитесь своими идеями.
Я уверен, что уже говорил об этом раньше, но [пожалуйста, не набрасывайте возвращаемое значение 'malloc()' в C] (http://stackoverflow.com/questions/605845/do-i Литой-заместитель на результат из-таНоса). Благодарю. – unwind
@unwind В VS есть ошибка 'can not convert from 'void *' to 'int **'' – Jeyaram
@Jeyaram Вы должны скомпилировать C-код как C, а не как C++ (как вы сейчас пытаетесь сделать) , –