<![CDATA[Latest posts for the topic "Cấp phát bộ nhớ con trỏ lỗi ?"]]> /hvaonline/posts/list/23.html JForum - http://www.jforum.net Cấp phát bộ nhớ con trỏ lỗi ? Code:
#include <stdio.h>
#include <conio.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char *buffer = "demo%20bai tap";
char tempCode[3] = {0};
int j;
for(int i = 0;i< strlen(buffer);i++)
{
if(buffer[i] == '%')
{
tempCode[0] = buffer[i+1];
tempCode[1] = buffer[i+2];
buffer[i] = strtol(tempCode,NULL,16);
j = i +1;
do
{
buffer[j] = buffer[j+2];
}while(buffer[2+(j++)]);
}
}
printf("\n %s \n",buffer);
getch();
return 0;
}
trong đoạn code trên nếu thay khai báo char *buffer = "demo%20bai tap"; thành char buffer[20] = "demo%20bai tap"; thì chương trình lại chạy bình thường, về mặt bản chất cả 2 khai báo trên là tương đương nhau vậy tại sao cách khai báo thứ nhất lại bị lỗi và lỗi xuất hiện tại dòng code sau Code:
buffer[i] = strtol(tempCode,NULL,16);
]]>
/hvaonline/posts/list/44412.html#274102 /hvaonline/posts/list/44412.html#274102 GMT
Cấp phát bộ nhớ con trỏ lỗi ? /hvaonline/posts/list/44412.html#274104 /hvaonline/posts/list/44412.html#274104 GMT Cấp phát bộ nhớ con trỏ lỗi ? Code:
#include<iostream.h>
#include<conio.h>
int main()
{
    int a;
    int *b;
    cout<<"\nNhap b";
    cin>>*b;
    cout<<"b = "<<*b;
    cout<<"\nDia chi con tro b"<<b;
    getch();
    return 0;
}
>]]>
/hvaonline/posts/list/44412.html#274114 /hvaonline/posts/list/44412.html#274114 GMT
Cấp phát bộ nhớ con trỏ lỗi ? char *buffer = "demo%20bai tap"; Đây là bạn lấy địa chỉ để lưu 1 giá trị cụ thể -> sai.   Cái này không sai bạn à, con trỏ buffer ở trên dùng để trỏ tới vùng nhớ chứa chuỗi "demo%20bai tap" chứ không phải lấy địa chỉ của nó để lưu giá trị đó.
Bạn muốn lưu nội dung vào thì hình như tớ nhớ ko nhầm bạn cần phải cất thế này: **buffer: nghĩa là nội dung của con trỏ *buffer.  
Bạn lại nhầm về con trỏ rồi, khai báo **buffer là con trỏ trỏ tới con trỏ tức là buffer sẽ lưu địa chỉ của một con trỏ(bản chất con trỏ cũng là một biến nên nó cũng có địa chỉ trong ô nhớ) chứ không phải lưu nội dung của con trỏ , nội dung và địa chỉ là 2 cái khác nhau hoàn toàn Theo như giải thích của bạn n2tforever là có cơ sở, tôi cũng thấy kì lạ khi không thể write vào vùng nhớ được]]>
/hvaonline/posts/list/44412.html#274120 /hvaonline/posts/list/44412.html#274120 GMT
Cấp phát bộ nhớ con trỏ lỗi ? /hvaonline/posts/list/44412.html#274125 /hvaonline/posts/list/44412.html#274125 GMT Cấp phát bộ nhớ con trỏ lỗi ? Code:
#include <stdio.h>
//#include <conio.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
int main()
{
	char *buffer;
	buffer = malloc(32);

	if(!buffer)return -1; //can't malloc
	strcpy(buffer, "demo%20bai tap");

	char tempCode[3] = {0};
	int j;
	int i;

	for(i = 0;i< strlen(buffer);i++)
	{
		if(buffer[i] == '%')
		{
			tempCode[0] = buffer[i+1];
			tempCode[1] = buffer[i+2];
			buffer[i] = strtol(tempCode,NULL,16);
			j = i +1;
			do
			{
				buffer[j] = buffer[j+2];
			}while(buffer[2+(j++)]);
		}
	}
	printf("\n %s \n",buffer);
	getchar();
	if(buffer)free(buffer);
return 0;
}
]]>
/hvaonline/posts/list/44412.html#274129 /hvaonline/posts/list/44412.html#274129 GMT
Cấp phát bộ nhớ con trỏ lỗi ? /hvaonline/posts/list/44412.html#274130 /hvaonline/posts/list/44412.html#274130 GMT Cấp phát bộ nhớ con trỏ lỗi ? /hvaonline/posts/list/44412.html#274132 /hvaonline/posts/list/44412.html#274132 GMT