我用這個代碼,通過這種結構,即時通訊設法使功能來添加項目到這個結構realloc()的無效NXT大小
typedef struct goods{
char *name;
int num;
} goods;
void addWord(char *what, goods *where, int pnr, int *arrsize, int n){
if (pnr >= *arrsize){
where = (goods*)realloc(where,*arrsize*2*sizeof(goods*));
*arrsize*=2;
}
where[pnr].name = (char*)malloc(strlen(what)*sizeof(char));
strcpy(where[pnr].name,what);
where[pnr].num = n;
}
在主要功能的陣列我有這個:
int extstore = 1;
goods *store = (goods*)malloc(1*sizeof(goods*));
addWord(line, store, nr, &extstore, n);
爲什麼我在addWord()
的行where = (goods*)realloc(where,*arrsize*2*sizeof(goods*));
上得到「無效的下一個大小」運行時錯誤?
編輯:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct goods{
char *name;
int r;
} goods;
int main()
{
int linelen, i, nr = 0, current_r;
char *line = NULL;
size_t len = 0;
int extstore = 1;
goods *store;
store = malloc(extstore*sizeof(goods*));
while (1){
while ((linelen = getline(&line, &len, stdin)) != -1){
if (line[linelen - 1] == '\n'){
line[linelen - 1] = '\0';
}
linelen = strlen(line);
if (line[0] == '#'){
if (sscanf(line,"#%d",¤t_r) != 1){
printf("bad input.");
return 0;
} else continue;
}
if (nr >= extstore){
store = realloc(store,extstore * sizeof(goods*) * 2);
extstore*=2;
}
store[nr].name = malloc(strlen(line)*sizeof(char));
strcpy(store[nr].name,line);
store[nr].r = current_r;
nr++;
}
if (linelen == -1) break;
}
printf("\n");
for (i = 0;i < nr;i++){
printf("%s, [id:%d]\n", store[i].name, store[i].r);
}
return 0;
}
你忘了問一個問題。 – Mureinik 2014-12-06 16:02:44
@Mureinik:他問了一個問題。這是「爲什麼我的代碼中出現錯誤,在指定的行?」。誠然,對問號沒有明確的問題是一個壞主意。至少他提供了所有的信息來弄清楚什麼是錯的... – Deduplicator 2014-12-06 16:10:46
你得到了什麼樣的錯誤? – 4pie0 2014-12-06 16:14:11