คำตอบที่ได้รับเลือกจากเจ้าของกระทู้
ความคิดเห็นที่ 2
ภาษา C ไม่มี keyword new กับ delete
มีแต่ function malloc() กับ free() ใน standrard library ครับ
และถึงแม้จะใช้ C++ ก็จะใช้ปนกันไม่ได้
คืออะไรที่มาจาก malloc() ก็ต้องใช้ free() ในการคืน จะใช้ delete ไม่ได้
และที่ new ขึ้นมาก็ต้องใช้ delete ไม่ใช่ free() ครับ
โปรแกรมที่เขียนมีที่ผิดหลายจุด
ถ้าใช้ใน mode 64 bit pointer ก็จะมีขนาด 64 bit ส่วน int เป็น 32 bit
ส่งไป 64 bit แต่เอาไปแสดงแค่ 32 bit ค่ามันก็มั่วสิครับ
ถ้าอยากดูค่าของ pointer จริงๆ ให้ใช้ long หรือ unsigned long แทนครับ
ยังมีที่ผิดอื่นอยู่ แต่ไม่รู้ว่า จขกท เอา code มาให้ดูหมดหรือเปล่า
ถ้าเป็นภาษา C จริง ไม่มี
malloc.h ไม่ใช่ standard header file ครับ
function prototype ของ malloc() กับ free() อยู่ใน stdlib.h
ดังนั้น #include <stdlib.h> แทนครับ
ส่วนข้อสองไม่ทราบครับ
;>)
มีแต่ function malloc() กับ free() ใน standrard library ครับ
และถึงแม้จะใช้ C++ ก็จะใช้ปนกันไม่ได้
คืออะไรที่มาจาก malloc() ก็ต้องใช้ free() ในการคืน จะใช้ delete ไม่ได้
และที่ new ขึ้นมาก็ต้องใช้ delete ไม่ใช่ free() ครับ
โปรแกรมที่เขียนมีที่ผิดหลายจุด
char **b10=NULL;
b10=(char **)malloc(sizeof(char)*5);
char **b10=NULL;
b10=malloc(sizeof(char *)*5);
printf("&b10=%d \n",&b10);
printf("b10=%d \n",b10);
ถ้าใช้ใน mode 64 bit pointer ก็จะมีขนาด 64 bit ส่วน int เป็น 32 bit
ส่งไป 64 bit แต่เอาไปแสดงแค่ 32 bit ค่ามันก็มั่วสิครับ
ถ้าอยากดูค่าของ pointer จริงๆ ให้ใช้ long หรือ unsigned long แทนครับ
printf("&b10=%ld \n",(long)&b10);
printf("b10=%ld \n",(long)b10);
printf("&b10=%lx \n",(long)&b10);
printf("b10=%lx \n",(long)b10);
ยังมีที่ผิดอื่นอยู่ แต่ไม่รู้ว่า จขกท เอา code มาให้ดูหมดหรือเปล่า
ถ้าเป็นภาษา C จริง ไม่มี
void main()
นะครับ มีแต่int main() { ... }
int main (int argc, char **argv) { ... }
malloc.h ไม่ใช่ standard header file ครับ
function prototype ของ malloc() กับ free() อยู่ใน stdlib.h
ดังนั้น #include <stdlib.h> แทนครับ
ส่วนข้อสองไม่ทราบครับ
;>)
แสดงความคิดเห็น
อยากถามเรื่องภาษาCกับwin32 API with C
Microsoft Visual Studio 2010
1.ภาษาC
ในโค้ดนะคับ อยากรู้ว่า delete(b10(i)) ไหมมันถึงไม่ผ่านนะคับ งงจัง - -*
#include<stdio.h>
#include<malloc.h>
void main(void)
{
int i=0,j=0,k=0;
char **b10=NULL;
b10=(char **)malloc(sizeof(char)*5);
printf("&b10=%d \n",&b10);
printf("b10=%d \n",b10);
for (i=0;i<5;i++)
{
b10(i)=(char *)malloc(sizeof(char)*5);
if(i+1==5)
{
*(b10(i))='\0';
}
else
{
*(b10(i))=97+i;
}
printf("&b10(%d)=%d \n",i,&b10(i));
printf("b10(%d)=%d \n",i,b10(i));
printf("*(b10(%d))=%c \n\n",i,*(b10(i)));
}
printf("delete \n");
for(i=0;i<5;i++)
{
delete(b10(i));
b10(i)=NULL;
}
delete(b10);
b10=NULL;
printf("-------------------------------\n");
}
2.พอดีพึ่งหัดเริ่มใช้win32API นะคับ แล้วมัน
ERROR fatal error LNK1104: cannot open file 'G:\C_C++\test_scheay02\Debug\test_scheay02.exe'
ตอนแรกก็debugได้แล้วนะคับ ขึ้นหน้าต่างมาให้แล้ว แล้วผมก็ลองนู้นลองนี้ไปเรื่อย คราวนี้ built ไม่ได้เลย - -* ไม่มีตัวexeใน debugเลยอะคับ ไม่รู้จะแก้ยังไงดี - -*
#include<windows.h>
#include<windowsx.h>
#include"resource.h"
HWND hwnd=NULL;
LRESULT CALLBACK WindowProc(HWND hwnd,UINT msg,WPARAM wparam,LPARAM lparam);
int WINAPI WinMain(HINSTANCE hinstance,HINSTANCE hprevinstance,LPSTR lpcmdline,int ncmdshow);
void InitApp(HINSTANCE hinstance);
LRESULT CALLBACK WindowProc(HWND hwnd,UINT msg,WPARAM wparam,LPARAM lparam)
{
switch(msg)
{
case WM_PAINT :
break;
case WM_DESTROY :
PostQuitMessage(0);
break;
}
return DefWindowProc(hwnd,msg,wparam,lparam);
}
int WINAPI WinMain(HINSTANCE hinstance,HINSTANCE hprevinstance,LPSTR lpcmdline,int ncmdshow)
{
InitApp(hinstance);
//HWND hwnd;
MSG msg;
ShowWindow(hwnd,ncmdshow);
UpdateWindow(hwnd);
while(1)
{
if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
{
if(!GetMessage(&msg,NULL,0,0))
return(msg.wParam);
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return(msg.wParam);
}
void InitApp(HINSTANCE hinstance)
{
WNDCLASSEX winclass;
winclass.cbSize =sizeof(WNDCLASSEX);
winclass.style =CS_VREDRAW|CS_HREDRAW|CS_OWNDC|CS_DBLCLKS;
winclass.lpfnWndProc =WindowProc;
winclass.cbClsExtra =0;
winclass.cbWndExtra =0;
winclass.hInstance =hinstance;
winclass.hbrBackground =(HBRUSH) GetStockObject(WHITE_BRUSH);
winclass.lpszClassName ="SCHEAY";
winclass.lpszMenuName =MAKEINTRESOURCE(IDR_MAIN_MENU1);
winclass.hIcon =LoadIcon(hinstance,IDI_APPLICATION);
winclass.hCursor =LoadCursor(hinstance,IDC_ARROW);
winclass.hIconSm =LoadIcon(hinstance,IDI_APPLICATION);
RegisterClassEx(&winclass);
hwnd=CreateWindowEx(NULL,"SCHEAY","scheay_demo",WS_OVERLAPPEDWINDOW,200,200,800,800,NULL,NULL,hinstance,NULL);
}
ปล.ขอขอบคุณทุกท่านที่ช่วยเหลือนะคับ _/\_
ปล.ขออนุญาติแทน b10(i) เป็นarrarนะคับ ใช้ สี่เหลี่ยมละมันโพสไม่ขึ้น - -*