如何将内存分配给C中指针引用的变量?
如何将内存分配给C中指针引用的变量 此代码对我来说无法正常工作。 在malloc之后,pBitmap为0x600020“”。我只能分配第一个字符,但在尝试分配更多字符时,它将崩溃,因此显然没有正确分配内存如何将内存分配给C中指针引用的变量?,c,pointers,malloc,C,Pointers,Malloc,如何将内存分配给C中指针引用的变量 此代码对我来说无法正常工作。 在malloc之后,pBitmap为0x600020“”。我只能分配第一个字符,但在尝试分配更多字符时,它将崩溃,因此显然没有正确分配内存 int bmp_read_file(char * filename, BMPFILE *bmpfile, ...) { int num; bool loadbitmap; char ** pBitmap; // this code is kinda shorten va_list
int bmp_read_file(char * filename, BMPFILE *bmpfile, ...)
{
int num; bool loadbitmap; char ** pBitmap;
// this code is kinda shorten
va_list ap;
va_start(ap, num);
loadbitmap = va_arg(ap, bool);
pBitmap = va_arg(ap, char ** );
va_end(ap);
if (loadbitmap == 1){
*pBitmap = (char *) malloc( bmpfile->dib.raster_size );
// pBitmap is 0x600020 ""
*pBitmap[0]='1';
*pBitmap[1]='4'; // pBitmap is 0x600020 "1"
fclose(fp);
}
else
fclose(fp);
return 0;
}
我这样称呼它:
BMPFILE *bmpfile;
bool loadbitmap = true;
char * buffer; // bitmap buffer needed to be allocated
bmp_read_file(argv[1],&bmpfile,loadbitmap,&buffer);
您可以将指针用作
指针[1]
或将其用作*(指针+1)
来访问索引为1的元素。当然,对于任何其他索引,请替换1。
除非您有一组指针*否则指针[1]
将无法工作。更改:
*pBitmap[0]='1';
*pBitmap[1]='4'; // pBitmap is 0x600020 "1"
致:
现在,您的代码相当于
*(pBitmap[0])='1'
,考虑到您分配*pBitmap
的方式,这没有任何意义。您在评论中问道:
参数数量可变有什么问题
如果不使用可变数量的参数,函数可以简化很多
int bmp_read_file(char * filename,
BMPFILE *bmpfile,
bool loadbitmap,
char** pBitmap);
{
if (loadbitmap == 1)
{
*pBitmap = malloc( bmpfile->dib.raster_size );
(*pBitmap)[0]='1';
(*pBitmap)[1]='4';
}
// fclose(fp);
// Not sure why you have that in your function. There is no
// variable fp and there is no call to fopen().
return 0;
}
更新
再仔细考虑一下,您可以完全删除loadbitmap
参数
int bmp_read_file(char * filename,
BMPFILE *bmpfile,
char** pBitmap);
{
if (pBitmap != NULL)
{
*pBitmap = malloc( bmpfile->dib.raster_size );
(*pBitmap)[0]='1';
(*pBitmap)[1]='4';
}
return 0;
}
当您不需要标题信息时,只需使用:
BMPFILE *bmpfile;
bmp_read_file(argv[1],&bmpfile,NULL);
“123”远远不是字符,甚至不是字符串……您可能需要使用
strcpy
和双引号括起来的字符串literalsAs@EugeneSh。说,这甚至没有编译。什么是*pBitmap[0]='123'代码>应该怎么做?复制字符串“123”
?指定一个数值字符123
?但主要是,你为什么要用数量可变的函数参数使事情复杂化?它是在没有警告的情况下编译的吗?@Weather Vane:数量可变的参数有什么问题吗?我问的是如何分配内存,而不是如何访问元素是的,但就我所知,你的内存分配是正确的。现在不可能进行测试。好吧,考虑到pBitmap是指针数组(例如*argv[]
),这可能是有意义的。请注意,代码被缩短了。我之所以选择可变参数数,是因为在我只想读取文件头而不想读取位图的情况下,当您不需要读取文件头时,我不需要创建bool loadbitmap,char**pBitmap
所需的变量,只需将0
和NULL
传递给函数即可。
BMPFILE *bmpfile;
bmp_read_file(argv[1],&bmpfile,NULL);