这是在C++中制作可变大小结构的最佳方法吗?我不想使用vector,因为初始化后长度不会改变.
struct Packet
{
unsigned int bytelength;
unsigned int data[];
};
Packet* CreatePacket(unsigned int length)
{
Packet *output = (Packet*) malloc((length+1)*sizeof(unsigned int));
output->bytelength = length;
return output;
}
Run Code Online (Sandbox Code Playgroud)
编辑:重命名变量名称和更改的代码更正确.
我今天很难修复代码,然后我遇到类似的东西:
typedef struct {
int a;
int b;
int c;
int d;
char* word;
} mystruct;
int main(int argc, char **argv){
mystruct* structptr = malloc(sizeof(mystruct));
if (structptr==NULL) {
printf("ERROR!")
...
}
...
free(structptr);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
代码由于事实而给出了大量内存错误,这char* word是一个可变长度的字符串,而malloc没有为它分配足够的内存.实际上它只是20 Bytes为整体分配struct.有没有解决这个问题的方法,而不是char*像char word[50]什么?
我找到了以下示例:
typedef struct {
char * name;
char age;
} person;
person * myperson = malloc(sizeof(person));
myperson->name = "John";
myperson->age = 27;
Run Code Online (Sandbox Code Playgroud)
(http://www.learn-c.org/en/Dynamic_allocation)
我想我在这个例子中分配了8个字节(sizeof(人)).因此,当我将"justatestfoobar"分配给myperson-> name时,我认为我炸毁了程序...
有人可以解释为什么以及如何运作?