Що трапилось з наступним кодовим блоком?

Чому цей код блоку не працює?

int *p1 = malloc(128);

int main(void) {
char *p2 = malloc(128);
}
5
Що ви маєте на увазі під "не працює"? Чи можете ви вставити в повідомлення про помилку?
додано Автор David Robinson, джерело
Тому що це не правовий C синтаксис.
додано Автор Jim Balter, джерело
Тому що це не правовий C синтаксис.
додано Автор Jim Balter, джерело
Визначте "не працює": які помилки ви отримуєте, що ви очікували, що станеться, і що насправді відбувається.
додано Автор Andrew Marshall, джерело
Визначте "не працює": які помилки ви отримуєте, що ви очікували, що станеться, і що насправді відбувається.
додано Автор Andrew Marshall, джерело
(1): помилка: ініціалізатор повинен бути постійним.
додано Автор user1944441, джерело
(1): помилка: ініціалізатор повинен бути постійним.
додано Автор user1944441, джерело
@asafreedman empty in main is very correct, even more than without.
додано Автор user1944441, джерело
@asafreedman empty in main is very correct, even more than without.
додано Автор user1944441, джерело

8 Відповіді

ініціалізатор глобальної змінної повинен бути постійним, тому перший malloc викликає помилку часу компіляції.

2
додано

ініціалізатор глобальної змінної повинен бути постійним, тому перший malloc викликає помилку часу компіляції.

2
додано

По-перше, основна помилка полягає в тому, що ваш основний метод повинен повернути деяке значення int

int main(void) {
char *p2 = malloc(128);
return 0;
}

або спробуйте

void main(){
char *p2 = malloc(128);
}

2-го, ви можете вказати, який тип буфера вказує ваш покажчик, інакше воно буде (указано порожнім), тому я пропоную вам спробувати:

int *p1 = (int*)malloc(128);
char *p2 = (char*)malloc(128);
2
додано
Я б назвав це набагато сильнішим, ніж це: void main() неправильний в будь-якій розміщеній реалізації, внаслідок чого визначається невизначена поведінка. Ніколи не робіть цього.
додано Автор This isn't my real name, джерело
-1 void main() дійсно не правильно. Також відливання malloc не потрібно. Порожній покажчик автоматично перетворюється в будь-який покажчик, вам не потрібно нічого вказувати.
додано Автор user1944441, джерело

По-перше, основна помилка полягає в тому, що ваш основний метод повинен повернути деяке значення int

int main(void) {
char *p2 = malloc(128);
return 0;
}

або спробуйте

void main(){
char *p2 = malloc(128);
}

2-го, ви можете вказати, який тип буфера вказує ваш покажчик, інакше воно буде (указано порожнім), тому я пропоную вам спробувати:

int *p1 = (int*)malloc(128);
char *p2 = (char*)malloc(128);
2
додано
Я б назвав це набагато сильнішим, ніж це: void main() неправильний в будь-якій розміщеній реалізації, внаслідок чого визначається невизначена поведінка. Ніколи не робіть цього.
додано Автор This isn't my real name, джерело
-1 void main() дійсно не правильно. Також відливання malloc не потрібно. Порожній покажчик автоматично перетворюється в будь-який покажчик, вам не потрібно нічого вказувати.
додано Автор user1944441, джерело

ви не можете використовувати malloc для ініціалізації p1 за межами блоку коду, як це, просто виконайте це всередині основного, як p2

1
додано

ви не можете використовувати malloc для ініціалізації p1 за межами блоку коду, як це, просто виконайте це всередині основного, як p2

1
додано

Ви не можете викликати функцію при ініціалізації глобальної змінної. Це така лінія, на яку скаржаться:

int *p1 = malloc(128);

Змінити це в NULL, а потім в основному, ініціалізувати його.

1
додано

Ви не можете викликати функцію при ініціалізації глобальної змінної. Це така лінія, на яку скаржаться:

int *p1 = malloc(128);

Змінити це в NULL, а потім в основному, ініціалізувати його.

1
додано