Я написал небольшую программу на C ++, чтобы проиллюстрировать что-то другу, и заметил любопытное поведение: программа не завершает работу или не реагирует на CTRL + C после второй печати при запуске в cygwin, но работает, как и ожидалось, при запуске из powershellили перекомпилировать и запустить на Linux.
Когда я раскомментирую строку //free(map);
, программа завершается нормально.
Я хотел бы знать , почему cygwin зависает, так что я должен закрытьмятное окно - и если это проблема с моей машиной, как ее исправить.
#include<iostream> // for std::cout
#include<cstdlib> // for atoi, uses input 0 for invalid numbers
#include<stdio.h> // for printf
// typedef for clearer code
typedef int matrixcontent; // change 'int' to whatever kind of elements there are in the matrix
// declarations first, so I can write main whereever I want to
void printMatrix(matrixcontent* map, size_t dimX, size_t dimY) ;
void fillMatrix(matrixcontent* map, size_t dimX, size_t dimY) ;
int main(int argc, char** argv){
if(argc!=3){
printf("%s", "please give exactly two arguments.");
return 1;
}
// arg to int
int y = atoi(argv[1]);
int x = atoi(argv[2]);
// create matrix
// allocate memory space
matrixcontent* map = (matrixcontent*) malloc(sizeof(matrixcontent)*x*y);
if(map==NULL){
printf("%s", "Not enough memory");
}
// print current (random) content
printMatrix(map, x, y);
// fill matrix
fillMatrix(map, x, y);
// print the modified matrix again
printMatrix(map, x, y);
//free(map);
return 0;
}
void printMatrix(matrixcontent* map, size_t dimX, size_t dimY) {
for(size_t row=0; row<dimY; row++){
for(size_t col=0; col<dimX; col++){
std::cout << map[row*dimY+col] << ",\t";
}
std::cout << std::endl;
}
std::cout << std::endl << std::endl;
}
void fillMatrix(matrixcontent* map, size_t dimX, size_t dimY) {
for(size_t row=0; row<dimY; row++){
for(size_t col=0; col<dimX; col++){
map[row*dimY+col] = col+row; // fill with something
}
}
}
Я скомпилировал ее с g++ --std=c++11 -Wall -Wextra -O0 -g example.cpp -o example
в cygwin x64 на win10.
Что я пробовал
Debian, работает как задумано
Win10, cygwin x64, настольный ПК, странное поведение, как описано
Win10, cygwin x64, ноутбук, любопытное поведение, как описано с ./example 10 5
, но не с ./example 10 20
.
Win10, powershell, Laptop, работает как предназначено для ./example 10 5
и ./example 10 20
.