#include <stdio.h>
#include <stdlib.h>
main(){
int *ptr,r,c,i,j,min;
printf("Give me the size of rows and columns\n");
scanf("%d%d",&r,&c);
int mini[r];
ptr=(int*)malloc(r*c*sizeof(int));
if(ptr== NULL){
printf("Memory not allocated");
}
else{
for(i=0;i<r;i++){
for(j=0;j<c;j++){
printf("Give me the value ");
scanf("%d",&ptr+(i*c+j));
}
}
for(i=0;i<r;i++){
min=*(ptr+i*c);
for(j=0;j<c;j++){
if (*(ptr+i*c)<min){
min = *(ptr+i*c);
}
mini[i]=min;
}
}
for(i=0;i<r;i++){
printf("%d",mini[i]);
}
free(ptr);
}
}
Он получает значения строк и столбцов (r и c) без проблем, но он сбой, как только я доберусь до точки выделения выделенных элементов памяти. Например, если я установил r==3
и c==4
, тогда он получает запрос на 10-й элемент из 12, а затем он выдает сообщение о том, что файл filename.exe перестает работать.Динамическое распределение, не подлежащее сканированию Номер
Из моего опыта я думаю, что это как-то связано с функцией scanf()
. Я также пробовал без & в scanf
, scanf("%d",ptr +(i*c +j))
, но затем он падает, как только он считывает первый элемент.
В другой гораздо более простой программе, которую я написал, чтобы проверить ее, последний сценарий scanf()
не представляет проблем, и программа работает так, как предполагалось.
'если (PTR = NULL) {' это задание, а не сравнение, поэтому, я думаю, у вас есть некоторые опечатки, так как код, о котором вы говорите, не может выполнить иначе. Пожалуйста, исправьте их. – lared
Вы правы, спасибо – SokCEID