الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

سؤال عن malloc في ال C

مغلق
بدأه eng47 في 10 أبريل 2007 · 5 رد · 626 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

please, I want a help in this program:

Write a program to ask the user to enter the total number of bytes he or she wants to allocate. Then, initialize the allocated memory with consecutive integers, starting from 1. Add all the integers contained by the memory block and print out the final result on the screen.

I made the following code:


#include<stdio.h>

#include<stdlib.h>


main()

{

int bytes;

int *ptr;

printf("please, enter the number of bytes to allocate\n");

scanf("%d\n",&bytes);


ptr= malloc (bytes * sizeof(int));


if(ptr==NULL)

{

printf("memory allocation failed!\n");


}

else {

int i=0;

for(i=0;i<bytes;i++)

ptr
=i+1;


int j,sum=0;

for(j=0;j<bytes;j++)

sum+=ptr[j];

printf("sum of number from 1 to %d = %d\n",bytes,sum);


return 0;

}

}

but i had this error: error C2440: '=' : cannot convert from 'void *' to 'int *'

Conversion from 'void*' to pointer to non-'void' requires an explicit cast

Error executing cl.exe.

can any one help??

تم تعديل هذه المشاركة بواسطة eng47 في 10 أبريل 2007 في 16:13

#2

سبب الخطأ هو أنك لم تعمل Type casting

في حالتك هذه غير الجزء الذي تستدعي فيه malloc الى

ptr= (int*)malloc (bytes * sizeof(int));

هناك { خاص بـ else ناقص في الكود الذي وضعته ...

هذا بالنسبة للأخطاء ...

===

من نظرة سريعة على الكود ,أرى أن الكود الذي كتبته لا يتوافق مع مضمون السؤال

"First they ignore you, then they laugh at you, then they attack you, then you win"

===

اقتباس

حُكَّامُـنَا إِنْ تَصَـدّوا لِلْحِمَــى اقْتَحَمُـوا ***** وَإِنْ تَصَدَّى لَـهُ المُسْتَعْمِـرُ انْسَحَبُـوا

هُمْ يَفْرشـُونَ لِجَيْـشِ الغَــزْوِ أَعْيُنَـهُـمْ ***** وَيَدَّعُــونَ وُثُـوبَـاً قَـبْـلَ أَنْ يَثِـبُــوا

الحَاكِمُـونَ و«وَاشُنْـطُـنْ» حُكُومَتُـهُـمْ ***** وَاللامِعُــونَ وَمَـا شَعَّـوا وَلا غَرَبُــوا

القَاتِلُـــونَ نُبُــوغَ الشَّـعْــبِ تَرْضِـيَـــةً ***** لِلْمُعْتَدِيــنَ وَمَـا أَجْـدَتْـهُـمُ الـقُــرَبُ

لَهُمْ شُمُـوخُ «المُثَنَّـى» ظَاهِـرَاً وَلَهُـمْ ***** هَـوَىً إِلَـى بَابَـك الخَرْمِـيّ يُنْتَسَـبُ

البردوني "أبو تمام وعروبة اليوم" 1971

===

اقتباس
عبيد الهوى يحكمون البـلاد ***** ويحكمهــم كلّهـــم درهــــــم

و تقتـادهـم شهـوة لا تنــام ***** وهـــم فـي جـهالتهــم نــــوّم

ففــي كـــلّ ناحيــة ظـالـــم ***** غبــــــيّ يسـلـّطــــه أظلـــم

أيا من شبعتم على جوعــنا ***** وجـــوع بنينـا ألـم تتخمـــوا ؟

ألم تفهموا غضبة الكادحين ***** على الظلـم ؟ لا بدّ أن تفهموا

البردوني "نحن و الحاكمون "

#3

شكراً لتصحيح ال function ، بس أنا لا أعرف ماهو الجزء الناقص ، ما فهمته من البرنامج انه يريد تحديد مكان في الذاكرة ثم تعريفه بأرقام تبدأ من واحد حتى الرقم الذي يدخله ال user ثم جمع هذه الأرقام وعرض الناتج، ولكن البرنامج الآن لا يفعل شيء بعد إدخال الرقم ، لماااذاا؟؟

شكراً جزيلاً

#4

البرنامج اشتغل الحمد لله كان فيه مشكلة في scanf لما شلت \n اشتغل

شكراً

#5
sum+=ptr[j];

اذاي تقدر تحط عنوان في متغير عادي ؟

انا مش فاهم البرنامج اشتغل؟

#6

أخي St0rM-m4n :

sum+=ptr[j];

هذا السطر صحيح لأنه مع استخدام الـ index مع الـ pointers لا يوجد حاجة لاستخدام الـ dereference operator الذي يرمز له بالنجمة * ...

تم تعديل هذه المشاركة بواسطة matrix coder في 11 أبريل 2007 في 18:54

هذا الموضوع مغلق.

مواضيع مشابهة