这个简单的代码崩溃(分段错误),我不明白为什么。看起来像这个[]操作无法正常使用结构数组。也许有人知道这种奇怪行为背后的原因。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SIZE 3
typedef struct{
int a;
char * b;
}qwe;
void foo ( qwe **out){
int i;
*out = (qwe*)malloc(SIZE*sizeof(qwe));
for (i=0;i<SIZE;i++){
out[i]->a = i;
out[i]->b = strdup("Hello");
}
}
int main() {
int i = 0;
qwe *p = NULL;
foo(&p);
for (i=0;i<SIZE;i++)
printf("Int: %d, str: %s \n",p[i].a , p[i].b);
}
答案 0 :(得分:0)
使用声明qwe *p = NULL;
,您没有声明指针数组,而是声明实际的struct
。
但是在foo
中,您将数组内容视为指针并且这是不正确的。
您的方法可以像这样重写:
for (int i = 0; i<SIZE; i++) {
(*out)[i].a = i;
(*out)[i].b = _strdup("Hello");
}
另一种使dereferrency更易读的方法(在我看来)是传递对数组的引用:
void foo1(qwe *& out) {
out = (qwe*)malloc(SIZE * sizeof(qwe));
for (int i = 0; i<SIZE; i++) {
out[i].a = i;
out[i].b = _strdup("Hello");
}
}