0
char* meminfo()
{
char* buffer = NULL;
FILE* fp = fopen("/proc/meminfo", "r");
ssize_t read;
char* json = malloc(4096);
char* original = json;
json[0] = '\0';
json = strcat(json, "{");
size_t value = 1024;
while ((read = getline(&buffer, &value, fp)) != -1)
{
char name[1024];
name[0] = '\0';
char val[1024];
val[0] = '\0';
sscanf(buffer, "%s:", name);
buffer = buffer + strlen(name);
name[strlen(name) - 1] = '\0';
sscanf(buffer, "%s kB", val);
json = strcat(json, "\"");
json = strcat(json, name);
json = strcat(json, "\": \"");
json = strcat(json, val);
json = strcat(json, "\", ");
}
int n = strlen(json);
json[n - 2] = '}';
json[n - 1] = '\0';
fclose(fp);
return original;
}
所以我有這個函數讀取並生成meminfo文件中的數據的json字符串對象。然而,如果我在這個函數的返回值上調用free(),我會得到一個seg錯誤,我不能弄清楚(我在函數中使用了malloc,然後釋放它)。有任何想法嗎?免費通話的段錯誤
然後,字符* JSON;應該是全球 – Chinna
奇怪的,在我的情況(CentOS 5.3,gcc 4.3)你的代碼與免費()效果很好。沒有seg。故障。無論如何。你爲什麼不用memset()或bzero()初始化'json'? –
您可能溢出了4096緩衝區大小。你應該防守編程,並確保你不會寫入超過緩衝區容量。 –