例如:
int *start;
start = (int*)malloc(40);
Run Code Online (Sandbox Code Playgroud)
如果我想迭代所有40个字节,我该怎么做?我尝试过这样的事情:
while(start != NULL){
start++;
}
Run Code Online (Sandbox Code Playgroud)
但是,它会迭代大量的值,远远大于40.因此,如何确保迭代所有40个字节.
谢谢你的帮助.
这里有两个问题.
单个ptr ++跳过与其指向的元素类型一样多的字节.
这里的类型是int,所以每次跳过4个字节(假设32位机器,因为整数是4个字节(32位)).
如果要迭代所有40个字节(一次一个字节),请使用char数据类型进行迭代(或者将int*类型转换为char*然后递增)
另一个问题是你的循环终止.
没有人在这里放置一个NULL,所以你的循环将继续运行(并且指针向前推进),直到它遇到可能是null或者超出你分配的内存区域并崩溃.行为未定义.
如果分配了40个字节,则必须自己终止40个字节.
更新:
基于对原始问题的评论和结果投票,值得一提的是,类型转换malloc的结果在C中不是一个好主意.主要原因是它可能潜在地篡改失败的分配.但它是C++的一项要求.详细信息可以在SO上的完全相同的问题中找到.搜索"malloc的返回值"
首先,你应该int正确分配s:
int* start = malloc( sizeof( int )*40 ) ;
Run Code Online (Sandbox Code Playgroud)
然后你可以使用数组下标:
for( size_t i = 0 ; i < 40 ; i++ )
{
start[i] = 0 ;
}
Run Code Online (Sandbox Code Playgroud)
或指向已分配内存末尾的指针:
int* end = start+40 ;
int* iter = start ;
while( iter < end )
{
*iter= 0 ;
iter++ ;
}
Run Code Online (Sandbox Code Playgroud)