所以这是一个非常好的简单任务:
int **a = malloc(sizeof(int*));
int *b;
a[0] = b;
但是当我尝试通过指向struct的指针在结构中执行相同的操作时:
typedef struct jojo
{
int **a ;
}jojo;
让我说我分配一个指向jojo的指针,称为alpha有很多空间,比如100个整数......
jojo *alpha = malloc(sizeof(int)*100);
int *b;
alpha->a[0] = b;
这里存在分段错误。 我完全迷失了,所以我在寻求帮助。感谢。
答案 0 :(得分:1)
当你这样做时
malloc
你只为结构分配内存(并且不仅仅是结构所需的内存),而不是内部成员指向的内容。更糟糕的是a
没有初始化它分配的内存,其内容将不确定。
最后一部分意味着指针jojo *alpha = malloc(sizeof *alpha); // Allocate memory for the structure
alpha->a = malloc(100 * sizeof *alpha->a); // Allocate memory for a 100 pointers to `int`
看似随机,解除引用它将导致undefined behavior。
要解决您的问题,您需要先为结构分配内存,然后为结构内的指针分配内存:
Option Explicit
Public Sub TestMe()
Dim myDict As Object
Dim lngCounter As Long
Dim strKey As String
Dim objKey As Object
Set myDict = CreateObject("Scripting.Dictionary")
For lngCounter = 1 To 14
strKey = Cells(lngCounter, 1) & Cells(lngCounter, 3)
If myDict.exists(strKey) Then
myDict(strKey) = myDict(strKey) + 1
Else
myDict(strKey) = 1
End If
Next lngCounter
For lngCounter = 0 To myDict.Count - 1
Cells(lngCounter + 1, 6) = myDict.Items()(lngCounter)
Cells(lngCounter + 1, 7) = myDict.keys()(lngCounter)
Next lngCounter
End Sub
答案 1 :(得分:0)
a
没有指向任何地方。你只为结构保留了内存。您还必须为a
保留内存。
int *b;
//Reserve memory for 100 structures
jojo *alpha = malloc(sizeof(*alpha)*100);
//Reserve memory for a pointer on first structure
alpha->a = malloc(sizeof(*alpha->a)*1);
alpha->a[0] = b;
我要告诉你,如果b
没有值,那么如果你取消引用它就是未定义的行为。
另外,请检查我如何使用sizeof
关键字中的参数来检测要分配的内存大小。
答案 2 :(得分:0)
首先,
r0 = 0x00009000
r1 = 0x00000007
r2 = 0x00000008
r3 = 0x00000009
错误,因为 jojo *alpha = malloc(sizeof(int)*100);
与alpha
无关,一旦发生变化,您就会遇到麻烦。如果您的意思是(或实际上您想要)
sizeof (int) * 100
或更好,
jojo *alpha = malloc(sizeof(jojo)*100);
那就是说,你只为 jojo *alpha = malloc(sizeof(*alpha)*100); // no dependency on hard-coded type
分配了内存,而不是它的成员!
您还需要让会员alpha
指向某个有效的内存位置 ,然后才能取消引用它。