Я на Windows 7 - 64bit, используя VS2010.Следующий код строит Win32 без проблем и дает ожидаемый результат (две матрицы 8 на 8 со всеми элементами, имеющими значение 1, и третья матрица 8 на 8, показывающая адреса памяти).
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
int main(void) {
int rows, cols, i, x, y;
int **array_of_pointers, *arr2d;
rows = 8;
cols = 8;
arr2d = (int *) malloc(rows * cols * sizeof(int));
for(i = 0; i < rows*cols; i++) {
*(arr2d + i) = 1;
}
for(y = 0; y < cols; y++) {
printf("\n");
for(x = 0; x < rows; x++) {
printf("%d ",*(arr2d + y * cols + x));
}
}
array_of_pointers = (int **) malloc(rows * cols * sizeof(int));
//I want each element of this array_of_pointers to point to the corresponding element of arr2d
for(y = 0; y < cols; y++) {
for(x = 0; x < rows; x++) {
*(array_of_pointers + y * cols + x) = (arr2d + y * cols + x);
}
}
//now try printing from pointer array
printf("\n");
for(y = 0; y < cols; y++) {
printf("\n");
for(x = 0; x < rows; x++) {
printf("%d ",**(array_of_pointers + y * cols + x));
}
}
//now try printing addresses from pointer array
printf("\n");
for(y = 0; y < cols; y++) {
printf("\n");
for(x = 0; x < rows; x++) {
printf("%d ",*(array_of_pointers + y * cols + x));
}
}
free(arr2d);
free(array_of_pointers);
_getch();
return 0;
}
Однако при попытке сборки x64 в окне вывода появляется следующее сообщение об ошибке:
'test.exe': загружен 'C: \ Mycode \ test \ x64 \ Debug \ test.exe ', символы загружены.
' test.exe ': загружен' C: \ Windows \ System32 \ ntdll.dll ', не удается найти или открыть файл PDB
'test.exe': загружен 'C: \ Windows \ System32 \ kernel32.dll', не удается найти или открыть файл PDB
'test.exe': загружен 'C: \ Windows\ System32 \ KernelBase.dll ', Не удается найти или открыть файл PDB
' test.exe ': загружен' C: \ Windows \ System32 \ msvcr100d.dll ', символы загружены.
Обнаружена критическая ошибка c0000374 Windows запустила точку останова в test.exe.
Это может быть связано с повреждением кучи, которая указывает на ошибку в test.exe или любой из загруженных им библиотек DLL.
Это также может быть связано с тем, что пользователь нажимает клавишу F12, когда у test.exe есть фокус.
Если я правильно выделил, использовал и освободил память для Win32, почему бы это сделать?ifferent для x64?