【发布时间】:2013-08-27 08:49:49
【问题描述】:
#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;
}
如果执行代码,我会在对话框中收到以下错误消息。
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中调试,当DisplayMatrix()的printf("\n");语句被执行时,同样的错误信息被重现。
如果我按继续,它会按预期打印 101 到 125。 在发布模式下,没有问题!!!。
请分享您的想法。
【问题讨论】:
-
我很确定我以前说过,但是please don't cast the return value of
malloc()in C。谢谢。 -
@unwind VS中出现错误
cannot convert from 'void *' to 'int **' -
@Jeyaram 您应该将 C 代码编译为 C,而不是 C++(正如您目前正在尝试做的那样)。
-
@H2CO3,让我检查一下。
-
有什么理由拒绝投票????
标签: c arrays visual-studio-2010 pointers malloc