(Прежде всего: этот код предназначен для запуска только на Windows10, но поведение на других ОС интересно. Конечно, измените _msize соответствующей функцией)
Часть I кода. Выделение памяти выполняется с помощью malloc, и я использую _msize, чтобы напечатать номер элемента массива в функции (я знаю, что по причине выделения памяти ... я мог бы иметь более высокое значение, но я еще не наблюдал такого случая. Если у вас есть реальный случай, когда это происходит, мне интересно, но это не главная причина моего вопроса)
Часть II кода: та же идея, но с переменным массивом длины. У меня два вопроса. Во-первых, существует ли эквивалент _msize для VLA? и во-вторых,
моя программа зависает, почему _msize не возвращает?
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
void myfoo(int *array) {
printf("Nb elt of an array obtained from its pointer %d\n",_msize(array)/sizeof(int));
}
int main() {
int n=1;
printf("Part 1 : malloc\n");
while(n>0) {
printf("n : ");scanf("%d",&n);
if (n<0) break;
int *array;
array=malloc(n*sizeof(int));
for (int i=0;i<n;i++) {array[i]=i;}
myfoo(array);
free(array);
}
n=1;
printf("Part 1I : Variable Length Array\n");
while(n>0) {
printf("n : ");scanf("%d",&n);
if (n<0) break;
int array[n];
for (int i=0;i<n;i++) {array[i]=i;}
myfoo(array);
}
}