1
我有一個使用此代碼和簡短版本的程序的較長版本。這是簡短的版本,奇怪的是,這個代碼在短版本程序中運行得非常好,但由於我在更大的版本中遇到了訪問衝突,所以我感覺有些問題是錯誤的。有沒有人用下面的代碼看到任何可怕的錯誤(這可能會導致數據損壞和/或訪問違規錯誤)?或者這樣好嗎?臭名昭着動態分配指向結構數組的指針
char strlist[5][11] = {
{ "file01.txt" },
{ "file02.txt" },
{ "file03.txt" },
{ "file04.txt" },
{ "file05.txt" }
};
typedef struct DYNAMEM_DATA {
char *string;
int strlen;
} DYNAMEM_DATA;
typedef struct DYNAMEM_STRUCT {
struct DYNAMEM_DATA **data;
int num_elements;
} DYNAMEM_STRUCT;
DYNAMEM_STRUCT *create_dynamem_struct(int num_elements, char *strlist)
{
DYNAMEM_STRUCT *ds = (DYNAMEM_STRUCT *)calloc(1, sizeof(DYNAMEM_STRUCT));
wchar_t wstring[128];
char len[3];
int i;
ds->data = (DYNAMEM_DATA **)calloc(num_elements, sizeof(DYNAMEM_DATA *));
ds->num_elements = num_elements;
for(i = 0; i < num_elements; i++) {
ds->data[i] = (DYNAMEM_DATA *)calloc(1, sizeof(DYNAMEM_DATA));
ds->data[i]->string = (char *)calloc(1, strlen(&strlist[i*11])+5);
ds->data[i]->strlen = strlen(&strlist[i*11]);
sprintf(ds->data[i]->string, "%s, %d", &strlist[i*11], ds->data[i]->strlen);
mbstowcs(wstring, ds->data[i]->string, 128);
MessageBox(NULL, wstring, TEXT("Error"), MB_OK);
}
return ds;
}
所以你有兩個方案,一個工程,和一個不,你告訴我們的工作之一,要求我們的問題是在一個*不*什麼?還是我誤解了一些東西? – jalf
而且工作的程序不包含'main()',所以它是程序的一個工作片段...代碼不會乾淨地編譯,因爲MessageBox,TEXT和MB_OK未在此代碼中定義或聲明。檢查內存分配可能不是一個壞主意。 –
較大的一個太大了,不能指望別人對它進行排序。問題是:我正在用指針和/或(m)(c)alloc來做一些愚蠢的事情嗎? –