【发布时间】:2012-01-07 23:31:22
【问题描述】:
标题:
#ifndef BIT_H_INCLUDE_GUARD
#define BIT_H_INCLUDE_GUARD
typedef unsigned char byte;
typedef struct{
size_t* size;
byte* map;
} bit;
bit* bdcteate(byte* size);
#endif /* BIT_H_INCLUDE_GUARD */
来源:
#include <stdlib.h>
#include "bit.h"
bit* bdcreate(byte* size){
bit* d;
byte i;
size_t s = 0;
for(i = 1; i < size[0]; i++){
s += (size_t) size[i];
}
if(!(d = malloc(sizeof(bit)))){
return (bit*) NULL;
}
if(!(d->size = malloc(sizeof(size_t)))){
return (bit*) NULL;
}
if(!(d->map = malloc(s * sizeof(byte)))){
return (bit*) NULL;
}
*d->size = s;
return (bit*) d;
}
主要:
#include <stdlib.h>
#include "bit.h"
void main(void){
byte *b, i;
byte size = 9;
b = malloc((size+1) * sizeof(byte));
b[0] = size;
for(i = 1; i <= size; i++){
b[i] = (b[i-1] + 10);
}
bit* dict;
if(!(dict = bdcreate(b))){ /* warning: assignment makes pointer from integer without a cast */
exit(EXIT_FAILURE);
}
exit(EXIT_SUCCESS);
}
正如您在注释行中看到的那样,我得到“警告:赋值使指针从整数而不进行强制转换”,尽管我尝试明确声明我正在返回一个指针。
我正在使用 gcc (gcc -o test main.c bit.c) 进行编译,并且程序 似乎 运行正常。
我应该忽略它,还是它会在我睡觉的时候回来咬我?
【问题讨论】:
-
确保注意所有警告,包括有关隐式声明的警告。
-
另外,如果第二个或第三个 malloc 失败,您将有内存泄漏。
-
是的,我知道内存泄漏,但我认为这段代码已经足够了!!!
-
你应该添加 gcc 选项
-Wall和-Werror这样你就可以捕捉到这种东西。
标签: c header gcc-warning