[英]allocating memory to pointer of typedef
我用typedef隱藏了一個指針,我正在嘗試創建一個數組。 我的結構是:
typedef struct s {
int y;
int x;
int value;
} s;
typedef s *t;
和主要的:
int main()
{
t *var;
int arg;
var = malloc(sizeof(t*));
arg = 40;
for (int x = 0; x < arg; x++)
{
var[x] = malloc(sizeof(t));
var[x]->x = -1;
var[x]->y = -1;
var[x]->value = 0;
}
for (int x = 0; x < arg; x++)
{
printf("|%d| ",var[x]->value);
}
return 0;
}
有時它只是出現分段錯誤,有時值只是臟,但這仍然意味着它沒有按意圖分配 memory。 我錯過了什么? 我只是想制作一個t類型的數組,其arg長度必須是一個變量
我用 typedef 隱藏了一個指針
這種非常糟糕的做法是所有錯誤的根源。 只是不要將指針隱藏在 typedef 后面。
因為現在你有一個t* var
它實際上是一個s**
。 然后你調用var = malloc(sizeof(t*));
這是完全錯誤的,因為您為s**
分配了空間。
您應該為40 * sizeof(s*)
分配空間,否則var[x]
將出現段錯誤。
然后 typedef 與否,這不是一個二維數組,而是一個分段查找表,它增加了額外的復雜性和更慢的代碼,絕對沒有任何收獲。 請參閱正確分配多維 arrays 。 但是看起來你甚至不需要一個二維數組,那么這一切是從哪里來的呢?
考慮到所有這些,讓 go 使用KISS 原則並從頭開始重寫代碼:
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int y;
int x;
int value;
} s;
int main (void)
{
int arg = 40;
s* var = malloc(arg * sizeof(*var));
for (int i = 0; i < arg; i++)
{
var[i].x = -1;
var[i].y = -1;
var[i].value = 0;
}
for (int i = 0; i < arg; i++)
{
printf("|%d| ",var[i].value);
}
free(var);
return 0;
}
2D 版本將使用s (*var)[y] = malloc( sizeof(s[x][y]) );
反而。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.