私はビルドのコードをビルダーにしました。それは構造体であり、ビルドには名前と2つの整数があります(実際には関係ありません)。三つの機能ポインタを使った構造が間違っている
があります(「ボブ」と0とし、3)構造体を初期化
第二の機能は、2つの構造体を取得し、第三
- これらの構造の間でコピーする必要があります関数はすべてのボブの名前(char *)を解放することです。
まず、第二の機能(コピー)は、(それがなぜ起こったか分析することであなたの助けが必要です)、それは名前をコピーしなかったため、デバッグ中に間違っていた、第二に、コードがフリー機能に墜落しました。誰かが構造の名前(char *)を解放する方法を教えてもらえますか? initBob
で
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define LENGTH_OF_BOB 4
typedef struct bobTheBuilder
{
char* name;
int fixed;
int maxFix;
}bob;
//typedef struct bobTHeBuilder bob;
void deleteBob(bob currBob);
void initBob(bob *currBob);
void copyStruct(bob* dst, bob src);
int main(void)
{
bob currBob = {0,0,0};
bob secondBob;
initBob(&currBob);
copyStruct(&secondBob, currBob);
deleteBob(currBob);
deleteBob(secondBob);
system("PAUSE");
return 0;
}
/*
*/
void initBob(bob *currBob)
{
char* str = (char*)calloc(LENGTH_OF_BOB, sizeof(char));
char string[] = "bob";
if (str)
{
strcat(string, "\0");
str = string;
currBob->name = str;
currBob->fixed = 0;
currBob->maxFix = 3;
}
}
/*
*/
void deleteBob(bob currBob)
{
free(currBob.name);
}
void copyStruct(bob* dest, bob src)
{
dest->fixed = src.fixed;
dest->maxFix = src.maxFix;
dest->name = (char*)malloc(sizeof(char) *LENGTH_OF_BOB);
strncpy(dest->name, src.name, LENGTH_OF_BOB);
}
ある[上のこの議論を参照してください。なぜではない'malloc()'の戻り値と 'C 'のファミリです。](http://stackoverflow.com/q/605845/2173917)。 –
あなたがそれが悪くならないと思ったときに、 'strncpy'はあなたの腸の中であなたをキックします –
確かに。 Googleは "なぜstrncpyは危険ですか"。 – Lundin