我认为在任何地方都有一个空指针异常,但我找不到它。这是我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <Windows.h>
#include <string>
#include <vector>
using namespace std;
int a = GetPrivateProfileInt("general","X",10,"./test.ini");
int b = GetPrivateProfileInt("general","Y",10,"./test.ini");
void random_array(int **A, int X, int Y) {...}
void array_anzeigen(int **arr, int X, int Y) {...}
void neues_array(int **A, int X, int Y)
{
int **array1=NULL;
array1 = (int **) malloc(a*sizeof(int *));
for (int i=0;i<a;i++)
array1[i] = (int *) malloc(b*sizeof(int));
const int S = sizeof(array1);
const int T = sizeof(array1);
int temp[S][T];
for(int i = 0; i < Y; i++)
{
for(int j = 0; j < X; j++)
{
temp[i][j] = A[i][j];
}
}
int maske[S][T];
for(int i = 0; i < Y; i++)
{
for(int j = 0; j < X; j++)
{
maske[i][j] = 0;
}
}
for(int i = 0; i < Y; i++)
{
for(int j = 0; j < X; j++)
{
if(temp[i-1][j-1] == 1 && i > 0 && j > 0) ++maske[i][j];
if(temp[i ][j-1] == 1 && j > 0) ++maske[i][j];
if(temp[i-1][j ] == 1 && i > 0 ) ++maske[i][j];
if(temp[i-1][j+1] == 1 && i > 0 && j + 1 < X) ++maske[i][j];
if(temp[i ][j+1] == 1 && j + 1 < X) ++maske[i][j];
if(temp[i+1][j ] == 1 && i + 1 < Y ) ++maske[i][j];
if(temp[i+1][j-1] == 1 && i + 1 < Y && j > 0) ++maske[i][j];
if(temp[i+1][j+1] == 1 && i + 1 < Y && j + 1 < X) ++maske[i][j];
if(maske[i][j] > 3 || maske[i][j] < 2)
A[i][j] = 0;
else if(maske[i][j] == 3)
A[i][j] = 1;
}
}
}
int main()
{
int **array1=NULL;
array1 = (int **) malloc(a*sizeof(int *));
for (int i=0;i<a;i++)
array1[i] = (int *) malloc(b*sizeof(int));
const int X = a;
const int Y = b;
srand((unsigned int) time(NULL));
random_array(array1, X, Y);
int runde = 1;
while(getchar())
{
neues_array(array1, X, Y);
printf(" Runde %i\n", runde);
array_anzeigen(array1, X, Y);
++runde;
}
return 0;
}
VB2012说,例外情况如下:
for(int i = 0; i < Y; i++)
{
for(int j = 0; j < X; j++)
{
temp[i][j] = A[i][j];
}
}
我是德国人,我的书面英语很糟糕,但我想,你了解我。
答案 0 :(得分:1)
S和T具有相同的值,因为您使用sizeof(array1)初始化它们。 但是不同维度的大小由变量a和b给出,您应该使用它来定义数组。否则你就会走出数组边界。