Как работает этот код (в описании)? - PullRequest
0 голосов
/ 29 июня 2019

Если вы, ребята, видите приведенный ниже код, память не выделяется (выделяется только 0 байт) для ptr .Но как можно инициализировать ptr [0], ptr [1] ..... ptr [n], если для них нет места.

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>

void main(){
    int *ptr;
    ptr = malloc(0);
    ptr[0] = 0;
    ptr[1] = 4;
    ptr[2] = 3;

    printf("%d %d %d",ptr[0],ptr[1],ptr[2]);
}

1 Ответ

0 голосов
/ 29 июня 2019
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
int main(void){
float *ptr;
ptr=malloc(2);
float j=0;
for(int i=0;i<1000;i++,j++){
ptr[i]=j;
printf("%f \n",ptr[i]);
}
}

Выходные данные будут показаны: Ошибка сегментации;

Возможный вывод для отображения: 0 1 2 ...... 999

Но фактический результат: 0 1 2 ......... 679

Из этого можно сделать вывод, что malloc выделяет дополнительные 660 байтов.

В этом случае malloc выделяет дополнительные байты из того, что вы указали. Но это относится не ко всем случаям. Это только один пример. malloc покажет НЕОПРЕДЕЛЕННОЕ ПОВЕДЕНИЕ в зависимости от среды.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...