C代碼以下運行在我的Mac OS X環境很好,但如果我嘗試運行在Ubuntu的環境中,該代碼,我得到一個malloc斷言失敗,每當我把偶數輸入例如「1 2」,但奇數輸入「1 2 3」起作用。錯誤是。 (old_top ==(((mbinptr)(((char *))&((av) - > bins [((1) - 1)* 2])) - __builtin_offsetof(結構個malloc_chunk,FD))))& & old_size == 0)|| ((unsigned long)(old_size)> =(unsigned long)((((_builtin_offsetof(struct malloc_chunk,fd_nextsize))+((2 *(sizeof(size_t)))-1)&〜((2 * (爲size_t))) - 1)))& &((old_top) - >大小爲0x1 &)& &((無符號長整數)OLD_END & pagemask)== 0)」失敗。 Aborted(核心轉儲)SYSMALLOC:在Ubuntu環境下斷言失敗
我不知道OS X和Ubuntu環境之間的區別,所以如果有人能指出什麼是錯的,我會很感激。我正在運行Ubuntu 14.04。這似乎在y內崩潰= NULL循環
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <signal.h>
void free_argv(char **argv,int counter)
{
int i = 0;
for(i=0;i<counter;i++)
{
free(argv[i]);
}
free(argv);
}
int main()
{
char *line = NULL;
size_t len = 0;
ssize_t read;
char **argv = NULL;
int counter;
int status;
while ((read = getline(&line, &len, stdin)) != -1)
{
counter = 1;
printf("$ ");
char* x = strtok(line,"\n");
int i = 0;
while(x[i] != '\0')
{
if(x[i] == ' ')
{
counter++;
}
i++;
}
argv = malloc(sizeof(char*)*(counter+1));
argv[counter+1] = NULL;
i = 0;
char* y = strtok(x," ");
printf("user input:\n");
while(y != NULL)
{
argv[i] = malloc(sizeof(char)*strlen(y));
strncpy(argv[i],y,strlen(y));
printf(" %s\n",argv[i]);
y = strtok(NULL," ");
i++;
}
free_argv(argv,counter);
}
return 0;
}
的argv [I] = malloc的(的sizeof(char)的* strlen的(Y));犯規分配anough內存,你需要+ 1 – pm100 2015-02-05 20:37:26
BTW的strdup會做的malloc和複製你 – pm100 2015-02-05 20:38:38
@myaut我無法相信我錯過了的argv [計數器+ 1] = NULL;謝謝! – killerkev 2015-02-05 20:57:49